无法将图像的所有像素更改为所选颜色

Can't change all pixel of an image to selected color

本文关键字:颜色 像素 图像      更新时间:2023-10-16

我对此代码有问题,我不知道为什么它仅替换图像的第一个60像素(j从0到59),其他所有内容都不是(j in循环从60到360)。我刚刚进行了测试,它仍然是其他情况,但是它没有用我选择的颜色代替这些像素:

for (int i = 0; i < 40; i++)
    {
        for (int j = 0; j < 360; j++)
        {
            if (j > 300)
            {
                color_bar.at<Vec3b>(i, j)[2] = 0;
                color_bar.at<Vec3b>(i, j)[1] = 255;
                color_bar.at<Vec3b>(i, j)[0] = 0;
            }
            else if (j > 240)
            {
                color_bar.at<Vec3b>(i, j)[2] = 0;
                color_bar.at<Vec3b>(i, j)[1] = 0;
                color_bar.at<Vec3b>(i, j)[0] = 255;
            }
            else if (j > 180)
            {
                color_bar.at<Vec3b>(i, j)[2] = 0;
                color_bar.at<Vec3b>(i, j)[1] = 255;
                color_bar.at<Vec3b>(i, j)[0] = 0;
            }
            else if (j > 120)
            {
                putText(color_bar, "120", Point2f(2, 30), FONT_HERSHEY_PLAIN, 2, Scalar(0, 0, 255, 255));
                color_bar.at<Vec3b>(i, j)[2] = 255;
                color_bar.at<Vec3b>(i, j)[1] = 0;
                color_bar.at<Vec3b>(i, j)[0] = 0;
            }
            else if (j > 60)
            {
                color_bar.at<Vec3b>(i, j)[2] = 0;
                color_bar.at<Vec3b>(i, j)[1] = 255;
                color_bar.at<Vec3b>(i, j)[0] = 0;
            }
            else
            {
                color_bar.at<Vec3b>(i, j)[2] = 0;
                color_bar.at<Vec3b>(i, j)[1] = 0;
                color_bar.at<Vec3b>(i, j)[0] = 255;
            }
        }
    }

这是我的结果图像:结果

对不起,我的英语不好

打开图像后,我看到带有cols == 40的图片== 360,因此您应该使用

访问元素
color_bar.at<Vec3b>(j,i)[..] = value;

j-是行,i-是col。