Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 图像彩色化算法_Image_Image Processing_Colors - Fatal编程技术网

Image 图像彩色化算法

Image 图像彩色化算法,image,image-processing,colors,Image,Image Processing,Colors,我有一个图像,我想改变它的像素颜色以匹配特定的颜色(尽管不是完全匹配) 例如,我想将红色汽车的图像着色,使其显示为蓝色。我可以用GIMP和ImageMagick来实现这一点,但我想知道他们使用哪种算法来实现这一点,这样我就可以在我自己的程序中实现它 我曾尝试通过简单地添加颜色之间的差异来实现这一点,但效果不太好。这只是在黑暗中拍摄的一张照片,是最近刚进入图像处理领域的人提出的未经测试的建议。。。也许你可以缩放频道 例如: RGB_Pixel.r = RGB_Pixel.r * 0.75; RGB

我有一个图像,我想改变它的像素颜色以匹配特定的颜色(尽管不是完全匹配)

例如,我想将红色汽车的图像着色,使其显示为蓝色。我可以用GIMP和ImageMagick来实现这一点,但我想知道他们使用哪种算法来实现这一点,这样我就可以在我自己的程序中实现它


我曾尝试通过简单地添加颜色之间的差异来实现这一点,但效果不太好。

这只是在黑暗中拍摄的一张照片,是最近刚进入图像处理领域的人提出的未经测试的建议。。。也许你可以缩放频道

例如:

RGB_Pixel.r = RGB_Pixel.r * 0.75;
RGB_Pixel.g = RGB_Pixel.g * 0.75;
RGB_Pixel.b = RGB_Pixel.b * 1.25;
如果你用这三个变化逐像素循环你的图像,我希望你看到图像向蓝色移动,当然数字可以是反复试验的

编辑: 现在,如果你只想改变像素的颜色,比如说,你想把一辆蓝色的车变成红色,而不对图片的其余部分做任何改变,你需要对每个像素进行检查,看看它是什么颜色。一种方法是使用欧几里德距离:

int* R = RGB_Pixel.r;
int* G = RGB_Pixel.g;
int* B = RGB_Pixel.b;

// You are looking for Blue, which is [0 0 255];
// this variable D is the distance of your current pixel from the desired color.
float D = sqrt( (R-0)*(R-0) + (G-0)*(G-0) + (B-255)*(B-255) );

if(D < threshold)
{
    R = R * 0.75;
    G = G * 0.75;
    B = B * 1.25;
}
int*R=RGB_Pixel.R;
int*G=RGB_Pixel.G;
int*B=RGB_像素.B;
//您正在查找蓝色,即[0 255];
//此变量D是当前像素与所需颜色的距离。
浮点数D=sqrt((R-0)*(R-0)+(G-0)*(G-0)+(B-255)*(B-255));
如果(D<阈值)
{
R=R*0.75;
G=G*0.75;
B=B*1.25;
}
threshold变量是一个介于1和255之间的数字,表示颜色与您要查找的颜色之间的最大距离,并且仍然被视为“足够近”。这是因为您不想只查找[0 0 255],很少会在图像中找到完美的蓝色(或任何完美的东西)

您希望使用可以忽略的最低阈值,这样就不会对不属于您要查找的对象的其他对象着色,但您希望确保阈值足够高,足以覆盖整个图像。一种方法是设置多个D变量,每个变量具有不同的目标颜色,这样您就可以捕获几种不同类型的“蓝色”,而无需使用非常高的阈值。例如,在人眼看来,[102 102 200]看起来像蓝色,但如果[0 0 255]是目标颜色,则可能需要相当高的阈值才能捕捉到


我建议使用计算器来了解您要搜索的具体颜色。

我认为GIMP会将图像转换为HSV,并调整每个像素的
v
分量。这是我的猜测,因为我不知道它是如何工作的。你用什么颜色的模型?如果你在RGB空间,我不知道怎么做。如果您正在使用,它实际上只是一个加法(模极大值)。(当然,你可以在RGB和HSV/HSL/HSB/之间转换)@Blender我认为它实际上改变了色调而不是值。另外,别忘了放置一些东西来防止你的新蓝色元素超过255(或你使用的任何限制)。这似乎在某种程度上起作用,我不知道如何从RGB值中获取这些比例…你说“从RGB值中获取这些比例”是什么意思?我不确定你的目标到底是什么,你是想缩放整个图像还是只缩放图像中的一个对象?如果您希望更改图像中特定内容的颜色,则需要进行一些颜色检测,我可以帮你,因为这正是我在当前项目中所使用的。所谓比例,我指的是你为了改变颜色而给出的十进制值:p你有关于你项目信息的链接吗?我不是从任何东西计算这些十进制值,它们只是示例。重点是稍微减少红色和绿色元素,稍微增加像素中的蓝色元素,将其整体颜色移向蓝色。你转移的实际金额由你决定。