c++11 - 我想在 Opencv C++ 的图像中找到主色
问题描述
我是 openCV 的新手,并且从过去两周开始进行搜索,但所有答案要么在 python 中,要么不那么准确。我只是想在任何图像中找到颜色的最大数量。我尝试转换为 HSV 平面,然后循环图像并提取色调通道,然后增加范围内每种颜色的计数。但这种方法根本不准确。所以寻找更好的解决方案。
解决方案
通过查看从 RGB 到 HSV的颜色转换,我认为您可以执行以下操作:
黑色: V
低于25
和S
低于100
白色: V
高于230
和S
低于30
红色: H
低于15
或高于165
黄色: H
介于15-45
绿色: H
介于45-75
青色: H
介于75-105
蓝色: H
介于105-135
洋红色: H
介于135-165
您可以通过缩小H
通道来添加更多颜色,或者通过为颜色指定阴影来添加更多颜色,例如,如果45 < H < 75
,则为 ,为深绿色,为 为V < 128
浅绿色128 < V
。在任何情况下,您都需要区别对待黑白。这些S
和V
值只是示例,您甚至可以为它们提供功能。在灰色阴影之后检查其他颜色。
推荐阅读
- python - 为什么 Python 实例变量不起作用?
- javascript - 我如何比较文本与内部的双空格(“a b” isEqual to “a b”)?
- flutter - Flutter/Dart:如何在脚手架上使用 extendBody: true 时提升 FAB 的位置?
- mongodb - 找一个有多个条件的mongoose mongodb
- kubernetes - 在为 Spring Boot 应用程序提供服务时,如何调试这个无法解释的 Openshift 3 pod 进入崩溃循环?
- java - 如何在不影响动画性能的情况下执行 JavaFX 场景图更新
- java - 单独属性文件中的 Spring DataSource 密码导致“无法确定合适的驱动程序类”
- flutter - 错误:预期 3 个位置参数,但找到 0 个
- laravel - Laravel 打印检索到的数据
- windows - MiniFilter 驱动程序 - 正确的实现和 Microsoft 签名