1

我一直在尝试学习和使用opencv矩阵,但我被困在一个点上。

这是我的代码,

Mat my_img, im_rgb;

im_rgb = imread(imageName, 1);
my_img.create(im_rgb.size(), im_rgb.type()); 

cout << (int)my_img.at<Vec3b>(20,20).val[0] << " first\n";

my_img.zeros(im_rgb.size(), im_rgb.type()); 
cout << (int)my_img.at<Vec3b>(20,20).val[0] << " second \n" ;

my_img.at<Vec3b>(20,20).val[0] = 0;
cout << (int)my_img.at<Vec3b>(20,20).val[0] << third;

我阅读了图像并创建了一个Mat, my_imgim_rgb, CV_8UC3.

输出是

205 first
205 second
0 third

经过多次输出试验,我的解释是当在 Matrix 内部创建的 my_img 充满时205,当我调用zeros函数时,它什么也没做。但我可以改变矩阵元素的值。

当我在matlab中尝试这个时,它用0来满足矩阵。

我想知道,我做错了什么?谢谢,

4

1 回答 1

3

如果我没记错的话,zeros是一个静态函数cv::Mat,所以它不会影响对象。它是这样使用的:

my_img = cv::Mat::zeros(im_rgb.size(), im_rgb.type());
于 2013-07-14T20:37:15.310 回答