在标题中定义cv :: Mat后跟另一个Mat可以避免多个通道

时间:2012-11-29 13:18:38

标签: c++ memory-management opencv

我刚遇到一个奇怪的问题。在我班级的标题中,我已经定义了多个cv::Mat,如下所示:
cv::Mat drawing, img_grad, img_bright, img_cov;(ver1)
cv::Mat drawing, img_grad, img_bright, img_cov, img_notused;(ver2)

在代码i中,然后将img_cov定义如下:
img_cov = Mat::zeros( somemat.size(), CV_32FC(6) )
奇怪的是,如果我将另一个Mat添加到我的多个Mats的头部声明(参见上面的ver2)中,即使img_notused它从未使用过,我也无法访问我{{1}的任何其他频道比0.访问例如通过img_cov导致崩溃。

似乎是一个mermoy分配的东西。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:3)

您使用错误的命令来访问图像值(它应该在之前崩溃,也许您在发布模式下编译...)。

你的行应该是这样的:

typedef Vec<6,float> Vec6f;
Vec6f pixel = img_cov.at<Vec6f>(i,j); 
float value_you_look_for = pixel[1]; // note that 1 means the second channel of 6.

因为CV_32FC(6)表示渠道中包含float值的6通道矩阵。

供参考:link to specific docs