像素修改不包括整个图像

G_M*_*ney 1 c++ opencv pixel image-processing ios

我一直在做一些opencv和图像处理工作.每隔一段时间我都会遇到这样的情况:当我尝试像这里手动做一些像素修改时:

cv::Mat newImg = cv::Mat::zeros(img.size(), img.type());

    for( int y = 0; y < img.rows; y++ )
    {
        for( int x = 0; x < img.cols; x++ )
        {
            cv::Vec3b intensity = img.at<cv::Vec3b>(y, x);
            r = intensity.val[0];
            g = intensity.val[1];
            b = intensity.val[2];

            intensity.val[0] = r - (r * modify - r);
            intensity.val[1] = g - (g * modify - g);
            intensity.val[2] = b - (b * modify - b);

            newImg.at<cv::Vec3b>(y, x) = intensity;
        }
    }
Run Code Online (Sandbox Code Playgroud)

这会产生一个像这样的黑盒子的新图像

在此输入图像描述

现在我只是不明白为什么for循环不覆盖整张照片,我已经成功解决了这个问题,但纯粹的运气,仍然不明白为什么以及这个问题来自何处.

所以我的问题很简单:如何从我的图像中删除这个黑盒子?

谢谢

Aur*_*ius 5

此问题的最常见原因是您使用错误的元素类型访问图像.您.at<cv::Vec3b>(y,x)用于像素访问.这假设图像仅具有BGR通道.您的图像数据可能是BGRA格式,特别是因为这是iOS的原生图像格式.

要解决您的问题,请更改cv::Vec3bwith的所有实例cv::Vec4b,并且代码应该正常工作.