我正在努力使用方法ccm.ColorCorrectionModel.setWeightsList我无法获得参数p的正确格式。首先,ccm.ColorCorrectionModel中填充了格式/形状的源值和参考值(24,1,3)-都是双精度型。所以我尝试了一个numpyarray来表示参数p,格式也是(24,1,3)-weightsList的所有双精度值。但是运行时中断(见下文)。你知道出了什么问题吗?或者周围有一个小的python应用程序成功地使用了方法.setWeightsList(),在那里我可以看到源和权重值是如何链接的?
代码:
src = np.array([...]) # array of shape (24,1,3) values 0-255
ref = np.array([...]) # array of shape (24,1,3) values 0-255
model = cv2.ccm.ColorCorrectionModel(src/255, ref/255, cv2.ccm.COLOR_SPACE_sRGB);
w = np.array([...]) # array of shape (24,1,3) all values 1.0
model.setWeightsList(w)
model.run() => error
错误:“cv 2.错误:OpenCV(4.7.0)D:\a\开放源码软件\开放源码软件\模块\核心\源代码\算术.cpp:214:错误:(-209:输入参数的大小不匹配)该操作既不是“array op array”(其中数组具有相同的大小和类型),也不是“array op scalar”,也不是函数“cv::binary_op”中的“scalar op array”
2条答案
按热度按时间bvhaajcl1#
我在OpenCV源代码文件test_ccm.cpp中找到了一个C++示例。
在本例中,weights_list材质的大小为
(24, 1)
。test_ccm.cpp
文件中的相关部分:将
w
的大小修改为(24, 1)
。示例:
看起来每个权重都引用一个RGB三元组(每个权重引用[红、绿色、蓝])。
注意:我真的不知道权重列表的用途是什么(它似乎没有文档),并且很难遵循源代码。
hc2pp10m2#
关于weightsList的格式Rotems代码是正确的,但在我的代码的问题不是weightsList的格式,这是ccm的格式.我不明白这是怎么链接.我的代码,创建某种格式的问题:
model.setCCM_TYPE(cv2.ccm.CCM_4x3)当我更改为该模式时,一切运行正常:model.setCCM_TYPE(cv2.ccm.CCM_3x3)Rotem,谢谢你的链接,它引导我找到了正确的方向来定位问题。