0

我试图从我读入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 类型。

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

提前致谢!

(这是我试图访问的图像:在此处输入图像描述

4

1 回答 1

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]
于 2013-09-24T15:59:41.317 回答