OpenCV中ccm.ColorCorrectionModel.setWeightsList参数格式问题求助
OpenCV ccm.setWeightsList 参数格式问题解决及示例
错误原因
你误用了和源/参考数据同形状的(24,1,3)权重数组,这不符合方法要求。setWeightsList需要的是每个样本对应一个权重值,权重数组长度需与样本数量(这里是24)一致,每个元素对应单个颜色样本的权重,而非给每个通道单独设置权重。
正确参数格式
权重数组需满足:
- 数据类型:
np.float64(对应double类型) - 形状:支持
(24,)或(24, 1),不能是3通道形状。
Python 示例代码
import cv2 import numpy as np # 构造模拟的源数据和参考数据(形状(24,1,3),double类型) src = np.random.rand(24, 1, 3).astype(np.float64) ref = np.random.rand(24, 1, 3).astype(np.float64) # 构造权重数组:每个样本对应一个权重,形状(24,1)或(24,) weights = np.ones((24, 1), dtype=np.float64) # 示例:所有样本权重设为1 # 也可以写成 weights = np.ones(24, dtype=np.float64) # 创建颜色校正模型实例 model = cv2.ccm.ColorCorrectionModel(src, ref) # 设置权重列表 model.setWeightsList(weights) # 可选:指定校正方法(这里用默认的3x3矩阵校正) model.setMethod(cv2.ccm.CCM_3x3) # 运行校正 model.run() # 获取校正结果和转换矩阵 corrected_img = model.getCorrectedImage(src) ccm_matrix = model.getCCM() print("校正矩阵:\n", ccm_matrix)
补充说明
如果需要给每个通道单独分配权重,OpenCV的ccm模块原生不支持该功能,你可以对每个通道单独执行颜色校正,再合并通道结果。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

