gpt4 book ai didi

c++ - 将图像中的像素与 RGB 颜色进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 11:27:14 24 4
gpt4 key购买 nike

函数参数:输入图像,第一种颜色,第二种颜色

我正在拍摄一张图片,查看它的高度和宽度,然后遍历以找到一个像素。如果像素颜色最接近第一种颜色 (color1),则将该像素颜色更改为 color1,如果像素颜色最接近 color2然后将其更改为 color2。我的问题被认为是在代码 abs(color2-color1)/2 尝试比较两个参数颜色时。

void Preprocessor(BMP pix, RGB color1, RGB color2) {
int height = pix.GetHeight();
int width = pix.GetWidth();

for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (pix[i][j]->red + pix[i][j]->green + pix[i][j]->blue >
abs(color2 - color1) / 2) { // pixel color closest to color1

pix[i][j] = color1;
pix[i][j] = color1;
pix[i][j] = color1;
} else { // pixel color closest to color2
pix[i][j] = color2;
pix[i][j] = color2;
pix[i][j] = color2;
}
}
}
}

最佳答案

选择正确的指标

哪种颜色更接近这个的问题不是简单的问题。可以有几种方法来解决这个问题。您可能希望大致具有相同的亮度或色调或活力,或其他与此相关的东西。

所以你选择了 abs(color2 - color1)/2 并且这没有任何直观的值(value)。您可以考虑解释您采用这种确切方法的理由。

我建议您从亮度(有点)开始。假设您要估计 Taxicab 指标中一种颜色与另一种颜色的距离。然后选择较小的。

// Taxicab metric (Manhattan)
double distance(RGB c1, RGB c2) {
return
abs(c1->red - c2->red)
+ abs(c1->green - c2->green)
+ abs(c1->bule - c2->blue);
}

void Preprocessor(BMP pix, RGB color1, RGB color2) {
int height = pix.GetHeight();
int width = pix.GetWidth();

for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
double d1 = distance(color1, pix[i][j]);
double d2 = distance(color2, pix[i][j]);

if (d1 < d2) { // pixel color closest to color1
pix[i][j] = color1;
} else { // pixel color closest to color2
pix[i][j] = color2;
}
}
}
}

注意事项

您可能还想尝试其他度量标准(欧几里得)以及其他更适合以这种方式比较的配色方案 HSV, HSL

关于c++ - 将图像中的像素与 RGB 颜色进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com