Moh*_*mal 3 c# image image-processing
我有一个图像,我可以使用Martix读取它的所有像素颜色...如何更改任何像素的RGB如果我想将其转换为最接近的颜色(黑色,红色或白色)
我在Matrix中读取图像的代码是:
string sourceimg = @"D:\ProductionTools\Taskes\Image Processing\Test\001.jpg";
//...
Bitmap imageoriginal = new Bitmap(sourceimg);
int height = imageoriginal.Height;
int width = imageoriginal.Width;
Color[][] colormatrix = new Color[width][];
for (int i = 0; i < width; i++) {
colormatrix[i] = new Color[height];
for (int j = 0; j < height; j++) {
colormatrix[i][j] = new Color();
colormatrix[i][j] = imageoriginal.GetPixel(i, j);
}
}
Run Code Online (Sandbox Code Playgroud)
正如你的评论所指出的,问题是关于色距,这不是一件小事.它还涉及您使用的颜色空间,因此我将在此向您展示RGB,HSV,HLS和CIELAB中的示例.另外,要计算距离,您需要一个公式.为简单起见,让我们粘贴到欧氏距离,如同
然后,以平凡回答你的问题,你计算从当前颜色的距离q,以这三个目标pi,你有(黑,红,白).最小距离表示您替换的颜色.如果是平局,我保持最早的颜色给出最小距离.
现在,色彩空间在这项任务中也非常重要,因为它确定了欧氏距离的含义.这是一个示例图像:

以RGB格式转换:

在HLS中转换(即,RGB颜色转换为HLS并计算距离):

HSV:

CIELAB:

| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |