在openCV中更改单个像素颜色

时间:2016-03-17 13:37:51

标签: c++ image opencv colors pixel

我正在尝试使用cv :: mat中的openCV读取特定的像素颜色,但是我得到相同颜色的不同结果。所以我试着测试写像素颜色,这也导致奇怪的颜色与我的输入不同。 用于读取我使用的像素颜色:

Mat dst;
struct  {
    Vec3b colorrgb[10];
} RGBscan;
int aktivy[11] = {0, 430, 200, 170, 140, 200, 420, 670, 725, 725, 670};
int aktivx[11] = {0, 50, 200, 480, 920, 1200, 1360, 1200, 880, 540, 220};
for (int i = 1; i < 11; i++) {
    RGBscan.colorrgb[i] = dst.at<Vec3b>(aktivy[i], aktivx[i]);
    cout << "rgbcode: " << RGBscan.colorrgb[i] << "  x: " << aktivx[i] 
         << "  y: " << aktivy[i] << "\n";
};

虽然某些像素在cv :: Mat dst中包含相同的颜色,但在命令行中会得到不同的结果。

此外,当我尝试将像素设置为另一种颜色时:

dst.at<Vec3b>(436, 50) = 255, 255, 255;
dst.at<Vec3b>(437, 50) = 255, 255, 255;
dst.at<Vec3b>(438, 50) = 255, 255, 255;
dst.at<Vec3b>(439, 50) = 0, 0, 0;
dst.at<Vec3b>(440, 50) = 0, 0, 0;

我在照片上印上了不同的颜色。 当我用gimp检查打印像素时, (255,255,255)现在是:(255,110,110) 和(0,0,0)是:(0,210,210)。

这些像素的原始颜色为RGB(210,210,210)。

我只是不明白我做错了什么。感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

当您使用以下内容分配新值时

dst.at<Vec3b>(436, 50) = 255, 255, 255;

您正在使用C++ comma operator

要分配新值,您应该使用:

dst.at<Vec3b>(436, 50) = Vec3b(255, 255, 255);

另请注意,在i==10

时,您正在阅读界限
RGBscan.colorrgb[i] = ... // out of bounds when i == 10