我想使用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 ...
关于我缺少或做错的事情有什么想法吗?
最佳答案
如果要打印图像的所有像素,只需使用:
cout << image << endl;
如果要打印像素,请使用:
cout << image.at<Vec3b>(y, x) << endl; // for color image
要么
cout << (int) image.at<uchar>(y, x) << endl; // for gray-scale image
注意,在最后一行中,需要将其强制转换为
int
。有关详细信息,请查看Why "cout" works weird for "unsigned char"?。关于c++ - OpenCV输出奇数像素值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22570107/