Opencv C ++灰度图像黑色pixeled结果(当替换图像值时)

时间:2016-05-08 16:48:53

标签: c++ image opencv pixel grayscale

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

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

我用这个初始化是一个零灰度级的垫子

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 );

结果图像具有它应该具有的尺寸,但它是一张黑色的pixeled图片,不应该是一个白色的pixeled图像?

如果我提到我有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(执行期间)时,我得到了#34; Segmentation fault(core dumped)&#34;错误。 (我从Linux Ubuntu distri编写代码)

1 个答案:

答案 0 :(得分: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;