代码之家  ›  专栏  ›  技术社区  ›  Juan Sebastián Espinosa

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

  •  0
  • Juan Sebastián Espinosa  · 技术社区  · 9 年前

    我是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,我不知道这是否相关

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

    我得到的另一个问题是,当我释放Mat(在执行期间)时,我得到“Segmentation fault(core dumped)”错误。(我的代码来自Linux Ubuntu distric)

    1 回复  |  直到 9 年前
        1
  •  1
  •   Jose Quintero    9 年前

    尝试:

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

    当您使用CV_BGR2GRAY时,您正在创建一个具有3个颜色通道的材质,那么,当您有一个数字数组(B、G、R)时,就无法指定数字。 使用CV_8UC1创建一个具有1个uchar颜色通道的Mat,然后它应该与以下项一起使用:

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