知道Mat元素Opencv的价值

时间:2013-06-28 12:42:13

标签: c++ opencv mat

从我的问题来看, Can I determine the number of channels in cv::Mat Opencv

我使用相同的代码,找到图像的高斯拉普拉斯。在图像中很好地检测到对象周围的边缘。

如何访问最终输出图像的单个元素值abs_dst_gray?

我知道我必须使用'.at'运算符,我还发现它的数据类型是CV_8U。我尝试了以下

cout<<abs_dst_gray.at<uchar>(10,10)<<endl;

但是我无法使用这种方法知道它所持有的值。我怎样才能找到这个价值?如果我使用int或long,我最终得到垃圾值。我一直有这个错误和问题。请帮帮我。我需要这些值,以便我可以尝试确定边缘中给出的边界值,我稍后可以将其用于分割目的。提前致谢

2 个答案:

答案 0 :(得分:4)

您打印的字符不是整数表示。参见:

cv::Mat img(3,3,CV_8U,cvScalar(123));
cout<<"Number "<<(int)img.at<uchar>(1,1)<<" represents ASCII character \""<<img.at<uchar>(1,1)<<"\"";

输出:

Number 123 represents ASCII character "{"

您可以验证此事实here

答案 1 :(得分:2)

威廉已经触及了这一点,但你想要矩阵中数值的数字表示。您可以简单地将数据作为无符号整数请求,而不是按照威廉(有效!)的建议进行投射。

cout << abs_dst_gray.at<unsigned int>(10,10) << endl;