【问题标题】:Opencv C++ grayscale image black pixeled result (when replacing image values)Opencv C++灰度图像黑色像素化结果(替换图像值时)
【发布时间】:2016-09-03 07:04:15
【问题描述】:

我是opencv的新手,遇到了这个问题...

给定以下 Mat 类型(全局声明) 垫 src_gray; 垫 dst;

我有这个初始化的 dst 是一个零灰度 Mat

dst=Mat::zeros(src_gray.size(), CV_BGR2GRAY);

似乎我无法编辑 dst 图像上的像素(当我使用 imwrite 时,它​​给了我一个黑色图像,就好像我什么都没做一样)。 这是我目前拥有的代码:

  for(int i=0;i<=dst.cols;i++)
    for(int j=0;j<=dst.rows;j++)
    {
        dst.at<uchar>(j,i)=255;
    }
  imwrite( "img_res.png", dst );

结果图像具有它应该具有的尺寸,但它是黑色像素图片,不应该是白色像素图像吗?

如果我提到我有 3 个全局垫子,我不知道这是否相关

Mat image;
Mat src_gray;
Mat dst;

以这种方式初始化:

image = imread( argv[1], 1 );

cvtColor( image, src_gray, CV_BGR2GRAY );

然后,我将它们发布为:

image.release();
dst.release();
src_gray.release();

我遇到的另一个问题是,当我释放 Mats(在执行期间)时,我收到“分段错误(核心转储)”错误。 (我的代码来自 Linux Ubuntu 发行版)

【问题讨论】:

    标签: c++ image opencv pixel grayscale


    【解决方案1】:

    试试:

    dst=Mat::zeros(src_gray.size(), CV_8UC1);
    

    当您使用 CV_BGR2GRAY 时,您正在创建一个具有 3 个颜色通道的 Mat,然后,当您有一个数字数组 (B、G、R) 时,就无法分配一个数字。 使用 CV_8UC1,您可以创建一个具有 1 个 uchar 颜色通道的 Mat,然后它应该可以使用:

    dst.at<uchar>(j,i)=255;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 2014-05-15
      • 1970-01-01
      • 2018-01-05
      • 2013-07-28
      • 2015-10-07
      相关资源
      最近更新 更多