在Mat图像中发出访问/编辑像素位置的问题

时间:2013-09-24 15:52:36

标签: c++ image opencv image-processing

我试图从我读入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;
}

给我的结果: enter image description here

在此图像中,我试图查看图像中位置(10,10)的像素值。我试图输出图像的所有值,但它们仍然看起来像特殊字符。

我也尝试过Scalar和unchar类型而不是Vec3b,但似乎没有给我合适的值(0-255之间)。类型double为每个像素位置提供-NaN。我检查了图像的src.type()并返回了16,我认为是16S类型。

如何修改图像或以某种方式访问​​此类型的图像像素值并进行修改?

提前致谢!

(这是我尝试访问的图片:enter image description here

1 个答案:

答案 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]