image-processing - 我如何(非常近似地)根据它的 CMYK 或 RGB 数字概括颜色的名称?
问题描述
我正在逐像素处理图像,我需要获取每个像素的颜色名称。我有这些主要颜色名称:黄色、洋红色、青色、红色、绿色、蓝色、白色、黑色。我也有每个像素的 RGB 和 CMYK 数字。我如何根据这些数字将像素的颜色近似为上述之一?它不需要精确,只是一个非常普遍的近似值。有什么数学可以用 RGB 或 CMYK 来确定吗?我宁愿选择一个简单的解决方案而不是一个精确的解决方案。
解决方案
让我们以此为起始图像:
现在,制作一张我们要查找的所有颜色的地图,记住ImageMagick使用 X11 颜色名称,其中green
命名为lime
:
magick xc:black xc:white xc:red xc:lime xc:blue xc:cyan xc:magenta xc:yellow +append map.png
这使得这个 - 我已经放大了,因为它只有 8 像素宽和 1 像素高:
现在,我们只需让imageMagick将 Paddington 中的所有像素映射到我们地图颜色中最接近的颜色:
magick paddington.png +dither -remap map.png result.png
现在我们看一下结果颜色图中的像素分布:
magick identify -verbose result.png | grep -A9 Histogram
输出
Histogram:
78839: ( 0, 0, 0) #000000 black
15057: ( 0, 0,255) #0000FF blue
1: ( 0,255, 0) #00FF00 lime
22422: ( 0,255,255) #00FFFF cyan
18103: (255, 0, 0) #FF0000 red
11: (255, 0,255) #FF00FF magenta
5809: (255,255, 0) #FFFF00 yellow
19758: (255,255,255) #FFFFFF white
我们可以看到 400x400 中有 78839 个像素是黑色的,15057 个像素是蓝色的……等等。
请注意,您可以wand
使用 Python 绑定到ImageMagick来完成所有这些操作。
推荐阅读
- loops - 埃菲尔横跨 an_iterable as vs is
- javascript - 如何编辑 PubNub 消息并添加对单个消息的反应
- java - Java 工厂,但对象的属性略有不同
- python - 通过均值和标准差对 scipy 中的负二项式进行参数化
- colors - 使用Meshlab分析颜色到顶点颜色的偏差
- angular - Angular 6 ui-router 抛出“转换错误”
- node.js - 单击元素时从 mongodb 中删除特定的数组元素
- python - 导入 pandas python 时出错 - 找不到 DLL
- android - Retrofit2 不可接受的响应
- asp.net-core-webapi - 带有 ef 核心的 web api 核心中出现 404 错误