对二值化图像的选定区域内的目标彩图的物体颜色进行识别(RGB)并输出,用opencv怎么编写源代码?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对二值化图像的选定区域内的目标彩图的物体颜色进行识别(RGB)并输出,用opencv怎么编写源代码?相关的知识,希望对你有一定的参考价值。
跪求源程序!
1. 求得你的二值图像选定区域的外接矩形位置(左上角xy坐标,长,宽)2. 判断原彩色图中该区域内的RGB值(读图片RGB值会吧?data=image->imagedata, data[m*step+n])
3. 若符合你假设的条件,在原彩色图中截取(先设定ROI区域,然后cvcloneimage,再释放ROI区域) 参考技术A 二值化后的区域只有0、1可以作为掩码
图像中颜色的二值化
【中文标题】图像中颜色的二值化【英文标题】:binarization of colours in images 【发布时间】:2014-01-29 13:33:21 【问题描述】:我正在从基于像素的线图中提取图元,并希望通过颜色进行选择。因此在下面
我希望提取“蓝色”、“绿色”和“黑色”基元。 (我准备尝试重建被另一种颜色的图元分割的图元)。
但是,“蓝色”添加了不同数量的白色(类似于黑色的灰度)。因此,最常见的颜色(为简单起见四舍五入为 12 位)及其计数可能是
000 881 // black
88f 1089 // white-blue
fff 70475 // white
但在低频下还有其他程度的白度
// other white-blue
99f 207
// other grey
ddd 196
我相信作者在许多图表中只使用了非常有限数量的纯色(例如 3-6 种),并且各种渲染工具都会添加白色。 IOW颜色可以用(0 =< x =< 1)
表示
000 + x(FFF)
00F + x(FF0) // blue
0F0 + x(F0F) // green
但是,不要求使用原色,并且该集合可以是任意颜色的任意数量的白色。
如何重建(小)一组不同的颜色?如果可能的话,我可以选择这些区域,转换为灰色,并以正常方式进行二值化。
我更喜欢 Java 源代码,但我怀疑任何代码都足够了;
我已经阅读了两个有用的 SO 问题
"Rounding" colour values to the nearest of a small set of colours
HCL color to RGB and backward
它使用 H-C-L 并且可能是一种前进的方式,尽管它们没有直接满足我的要求。
【问题讨论】:
【参考方案1】:您可以尝试使用region growing。我认为它应该很好地满足您的需求。只需更改相同颜色的阈值即可。我认为它在这里应该可以很好地工作,因为作为对象连接的任何两种颜色之间似乎存在很大差异。
【讨论】:
它可能有用(而且我确实已经种植了区域)但是蓝色中白色的数量有很多变化 - 我真的很想将蓝色二值化为一个独特的操作跨度> 您是否能够将您绝对不想要的所有像素(例如所有全白像素)阈值化?您可以尝试对整个图像上的所有非白色像素进行动态聚类。这会将所有相似的颜色组合在一起,并且应该会自动工作,而无需确定阈值。 我们不能依赖块中的颜色。它可以更细粒度 - 例如抗锯齿字符 即使像素随机分布,kmeans 或聚类方法也可以工作。您甚至可能不必对白色和黑色数据进行阈值处理。您知道要分割出多少种颜色或哪些颜色吗? 没有。我知道可能不多,但我不知道它们是什么。没有美白很容易 - 只需编译一套。但由于它们可能会有所不同,我需要知道如何【参考方案2】:如果您的直觉是正确的(所有像素都是某种颜色和纯白色的线性混合),在 RGB 立方体中,所有颜色都将在源自白色角的线段上对齐。 p>
如果您为每种不同的颜色选择一个代表像素(尽可能远离白色,以提高准确性),您可以通过找到由该像素、白色和代表形成的最佳对齐方式来识别任何其他像素的颜色像素。
通过计算所形成角度的余弦来测试对齐(使用 3D 向量,余弦是范数乘积上的点积;放弃符号)。理论上余弦应该正好是 1,但由于数值误差它可以更小,所以只考虑使余弦最大化的代表颜色。
特别注意白色像素(到白色角落的距离较短),否则它们将被随机分配到一些代表颜色。
【讨论】:
谢谢。我已经意识到,如果不了解抗锯齿算法,可能就没有确切的答案。我认为白色被添加到基色中,但 H 和 S 都可以变化【参考方案3】:根据所涉及颜色的数量及其相似性,R、G 和 B 值的简单阈值会迅速将所有颜色减少到 8 种颜色中的一种(黑色、红色、绿色、蓝色、青色、洋红色、黄色、或白色)。
【讨论】:
以上是关于对二值化图像的选定区域内的目标彩图的物体颜色进行识别(RGB)并输出,用opencv怎么编写源代码?的主要内容,如果未能解决你的问题,请参考以下文章