我想用 C++ 对图像进行处理,一直在使用 OpenCV。在尝试单独访问每个像素时,我有点卡住了。我可以使用以下方法输出整个灰度图像:
cout << image;
并像这样获得值的预期输出:
[143, 147, 164, 177, 177, 185, 196, 195, 185, 186, 178, 190, 178, 163, 183...
但是当我尝试使用以下方法一次输出一个像素时:
for (int y = 0; y < image.rows; ++y) {
for (int x = 0;x < image.cols; ++x) {
std::cout<<image.at<double>(y, x)<<" ";
}
cout << endl;}
我的输出是一堆像这样的大数字:
-2.98684e+18 -1.21685e-83 -1.91543e-113 -1.8525e-59 -2.73052e-127 -2.08731e-35 -3.72066e-103 ...
关于我遗漏了什么或做错了什么有什么想法吗?
最佳答案
因为你的值 [143, 147, 164, 177...] 看起来像 uchar 类型,你的 Mat 类型应该是 CV_8U=0 或 CV_8UC3=16,你可以用 image.type() 检查。 所以你的输出应该是(正如@Micka 指出的那样)
std::cout<<image.at<uchar>(y, x)<<" "; // gray
or
std::cout<<image.at<Vec3b>(y, x)<<" "; // color
以后只要使用这个就不用再担心类型了:
Rect rect(0, 0, 10, 10); // print 10x10 block
cout<<image(rect)<<endl;
并不是说知道类型不重要。
关于c++ - OpenCV输出奇数像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570107/