OpenCV计算相机响应函数时报-215:Assertion failed错误如何解决
问题根因
你遇到的报错核心是calibrateDebevec的process方法要求输入的图像序列必须为8位无符号整数类型(对应OpenCV的CV_8U、NumPy的np.uint8类型,取值范围0~255),你当前传入的图像位深度不符合校验规则。
你使用cv.IMREAD_UNCHANGED参数读取图像时,会保留素材原始的位深度:如果你的包围曝光素材是16位的RAW导出文件、高位深PNG/TIFF格式,读取后的数组类型为np.uint16,自然无法通过函数校验。你已经确认的图像对齐、尺寸一致、曝光时间准确这些前提都符合要求,曝光时间用秒为单位的浮点型也完全没问题,不需要调整这部分逻辑。
修复方案
方案一:修改图像读取参数
直接去掉cv.IMREAD_UNCHANGED参数,OpenCV默认读取的图像就是8位3通道格式,符合函数要求:
import cv2 as cv import numpy as np paths = ['list of images'] times = [0.0666, 0.0333, 0.0166, 0.01, 0.008, 0.1, 0.2] images = [] for path in paths: # 去掉IMREAD_UNCHANGED,默认读取为8位BGR图像 im = cv.imread(path) images.append(im) calibrate = cv.createCalibrateDebevec() response = calibrate.process(images, times)
方案二:手动转换位深度
如果你的业务流程需要先做高位深图像处理再送入校准,可以手动将图像转换为8位格式:
for path in paths: im = cv.imread(path, cv.IMREAD_UNCHANGED) # 若原始为16位图像,先缩放至0~255区间再转uint8 im = (im / 256).astype(np.uint8) # 若原始为浮点型图像,先归一化到0~255再转uint8:im = (im * 255).astype(np.uint8) images.append(im)
内容的提问来源于stack exchange,提问作者Spencer
相关产品推荐
相关产品推荐

