我试图从我读入opencv的图像中访问和修改像素值。我读了几篇关于如何做到这一点的帖子,但是,它们似乎对我不起作用。
我的代码:
int main()
{
Mat src=imread("/home/jaysinh/Pictures/shapes.jpg");
cout<<"rows:"<<src.rows<<endl;
cout<<"cols:"<<src.cols<<endl;
cout<<src.at<cv::Vec3b>(10,10)[0]<<endl;
waitKey(0);
return 0;
}
给我的结果:
在此图像中,我试图查看图像中位置(10,10)的像素值。我试图输出图像的所有值,但它们仍然看起来像特殊字符。
我也尝试过Scalar和unchar类型而不是Vec3b,但似乎没有给我合适的值(0-255之间)。类型double为每个像素位置提供-NaN。我检查了图像的src.type()并返回了16,我认为是16S类型。
如何修改图像或以某种方式访问此类型的图像像素值并进行修改?
提前致谢!
(这是我尝试访问的图片:
答案 0 :(得分:3)
cout将你的字节解释为char,并尝试打印一些ascii;)所以只需转换为int:
cout << int(src.at<Vec4b>(3,3)[0]) << endl;
// 100
或打印整个像素:
cout << src.at<Vec4b>(3,3) << endl;
// [100, 23, 90]
是的,你可以操纵它:
Vec3b & pixel = src.at<Vec4b>(3,3);
pixel[1] += 5;
cout << src.at<Vec4b>(3,3) << endl;
// [100, 28, 90]