You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:45:05