【问题标题】:Issue accessing/editing pixel location in Mat image问题访问/编辑 Mat 图像中的像素位置
【发布时间】:2013-09-24 15:52:35
【问题描述】:

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

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

提前致谢!

(这是我试图访问的图像:

【问题讨论】:

    标签: c++ image opencv image-processing


    【解决方案1】:

    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]
    

    【讨论】:

      猜你喜欢
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2011-11-03
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 2017-04-23
      相关资源
      最近更新 更多