2

根据我的问题, 我可以确定 cv::Mat Opencv 中的通道数吗

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

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

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

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

但是使用这种方法,我无法知道它在那里有什么价值。我怎样才能找到那个值?如果我使用intor long,我最终会得到垃圾值。我一直有这个错误和问题。请在这里帮助我。我需要这些值,以便我可以尝试确定边缘中给出的边界值,以后可以将其用于分割目的。

4

2 回答 2

5

You print the character not the integer representation. See:

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)<<"\"";

Output:

Number 123 represents ASCII character "{"

You can validate this fact here.

于 2013-06-28T13:10:40.047 回答
2

William 已经谈到了这一点,但您需要矩阵中值的数字表示。您可以简单地将数据请求为无符号整数,而不是按照 William 的建议进行转换(这可行!)。

cout << abs_dst_gray.at<unsigned int>(10,10) << endl;
于 2013-06-28T14:04:58.070 回答