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

Opencv C++ grayscale image black pixeled result (when replacing image values)

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

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

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

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

如果我提到我有 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();

我遇到的另一个问题是,当我释放垫子时(在执行期间),我收到 "Segmentation fault (core dumped)" 错误。 (我从 Linux Ubuntu 发行版编码)

尝试:

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

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

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