OpenCV(Python):如何使用ccm.ColorCorrectionModel.setWeightsList(p)?

4dbbbstv  于 2023-03-19  发布在  Python
关注(0)|答案(2)|浏览(302)

我正在努力使用方法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”

bvhaajcl

bvhaajcl1#

我在OpenCV源代码文件test_ccm.cpp中找到了一个C++示例。
在本例中,weights_list材质的大小为(24, 1)
test_ccm.cpp文件中的相关部分:

Mat weights_list_ = (Mat_<double>(24, 1) <<
                        1.1, 0, 0, 1.2, 0, 0,
                        1.3, 0, 0, 1.4, 0, 0,
                        0.5, 0, 0, 0.6, 0, 0,
                        0.7, 0, 0, 0.8, 0, 0);

w的大小修改为(24, 1)
示例:

w = np.array(np.ones((24, 1))) # array of shape (24,1) all values 1.0
model.setWeightsList(w)
model.run() # Works

看起来每个权重都引用一个RGB三元组(每个权重引用[红、绿色、蓝])。
注意:我真的不知道权重列表的用途是什么(它似乎没有文档),并且很难遵循源代码。

hc2pp10m

hc2pp10m2#

关于weightsList的格式Rotems代码是正确的,但在我的代码的问题不是weightsList的格式,这是ccm的格式.我不明白这是怎么链接.我的代码,创建某种格式的问题:
model.setCCM_TYPE(cv2.ccm.CCM_4x3)当我更改为该模式时,一切运行正常:model.setCCM_TYPE(cv2.ccm.CCM_3x3)Rotem,谢谢你的链接,它引导我找到了正确的方向来定位问题。

相关问题