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

问题描述 投票:0回答:1

我有这个代码的问题,我不知道为什么它只替换我的图像的前60个像素(j从0到59),所有其他不是(循环中的j从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;
            }
        }
    }

这是我的结果图:result

对不起,我的英语不好

c++ opencv
1个回答
1
投票

打开图像后,我看到cols == 40和rows == 360的图片,所以你应该使用

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

j - 是行,我 - 是col。

© www.soinside.com 2019 - 2024. All rights reserved.