• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

摄像头识别技术

我是勺小鱼 2018-08-04 浏览量:1193
摄像头识别特定的颜色,用什么算法可以实现
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • HSL的H(hue)分量,代表的是人眼所能感知的颜色范围,这些颜色分布在一个平面的色相环上,取值范围是0°到360°的圆心角,每个角度可以代表一种颜色。基本参照:360°/0°红、60°黄、120°绿、180°青、240°蓝、300°洋红,它们在色相环上按照60°圆心角的间隔排列。 
    HSL的S(saturation)分量,指的是色彩的饱和度,它用0%至100%的值描述了相同色相、明度下色彩纯度的变化。数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从理性(灰度)到感性(纯色)的变化。 
    HSL的L(lightness)分量,指的是色彩的明度,作用是控制色彩的明暗变化。它同样使用了0%至100%的取值范围。数值越小,色彩越暗,越接近于黑色;数值越大,色彩越亮,越接近于白色。

    HSL与RGB之间的计算: 
    从RGB推算HSL: 
    R、G、B的数值定在【0255】 
    亮度L只依赖于R、G、B的最大值和最小值。若令M、N分别是R、G、B的最大值和最小值,则有:若M=0(N=0),即R、G、B均为0时,L=0;否则,亮度L为 
    其中。由公式可知,L的取值范围在0到240之间。 
    对于饱和度S:当M或N改变时S随之改变;否则,S不变。即S与L的情况类似,只与最大和最小值有关,换句话说与L有关。所以可以得到S与L之间的数学关系: 
    当M=N=0或者M=N=255时,没有意义;l=0时,s=0; 
    当(M+N)>256时,S为:S=240(M-N)/(512-M-N);当l>120时,s = (M-N)* 240 / ( 480 - ( M+ N) ); 
    当(M+N)<256时,S为:S=240(M-N)/(M+N);当l<=120时,s = (M-N)* 240 / ( M+ N); 
    同理,色相H也是只与最大值和最小值有关。 
    当M=N时,H无定义; 
    当最大值为红色,最小值为蓝色,即M=R、N=B,H介于0到40之间,有: 
    H=40(G-N)/(M-N); 
    当最大值为红色,最小值为绿色,即M=R、N=G,H介于200到240之间,有: 
    H=240+40(G-B)/(M-N); 
    当最大值为绿色,最小值为红色,即M=G、N=R,H介于80到120之间; 
    当最大值为绿色,最小值为蓝色,即M=G、N=B,H介于40到80之间; 
    h = 40 * ( B - R ) / (M-N)+ 80; 
    当最大值为蓝色,最小值为红色,即M=B、N=R,H介于120到160之间; 
    当最大值为蓝色,最小值为绿色,即M=B、N=G,H介于160到200之间; 
    h = 40 * ( R - G ) / (M-N)+ 160;

    从HSL反算RGB: 
    当H无定义时,表示R、G、B三者相等,因策,他们的值可以直接由下面公式求得: 
    当L=0时,R=G=B=0; 
    当L!=0时,R=G=B=(17L-8)/16; 
    当H有定义时,令SUM为M与N之和,由上面的公式可知,若L=0,则SUM=0,否则SUM=(17L-8)*2/16。 
    若SUM<256,则最大值M为:M=SUM/2+SUM*S/480; 
    若SUM<=256,则最大值M为:M=SUM/2+(512-SUM)*S/480; 
    求出最大值后,可以求出最小值N=SUM-M。 
    下面分六种情况求出R、G、B的值: 
    令L为H/40的整数部分: 
    若L=0,则: 
    R=M 
    B=N 
    G=B+H *(R-B)/40 
    若L=1,则: 
    G=M 
    B=N 
    R=G+(G-B)(H-40)/40 
    若L=2,则: 
    G=M 
    R=N 
    B=R+(G-R)(H-80)/40 
    若L=3,则: 
    B=M 
    R=N 
    G=B+(B-R)(H-120)/40 
    若L=4,则: 
    G=N 
    B=M 
    R=G+(B-G)(H-160)/40 
    若L=5,则: 
    R=M 
    G=N 
    B=R +(R-G)(H-200)/40 
    至此RGB的反算就完成了。

    • 发布于 2018-08-04
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:13
  • 你好 我之前使用过摄像头对红绿指定颜色的识别,用的OV7725的摄像头,输出的格式是RGB565,然后转换成HSL参数,把制定的颜色的阈值设定好,转换成二值,这样就能把制定的颜色识别出来啦(关于RGB565转HSL可以百度下),如果要用到对于物体轮廓的描绘的话,要用到像素的腐蚀,图片噪点的去除等,我的办法可能麻烦一点,但是可以实现,
    • 发布于2018-08-04
    • 举报
    • 评论 0
    • 4
    • 0

  • HSV通道分离

    首先将RGB编码转化为HSV编码,设定H\S\V各个参数的阈值

    • 发布于2018-08-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 看你用什么样的系统,单片机建议把颜色值分类,让摄像头去采集然后比对!
    • 发布于2018-08-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 先对图像开窗口,对窗口里的图像RGB运算,然后灰度处理,灰度处理这个有算法的,调整权重就可以简单的识别颜色,,我以前只识别过5中颜色
    • 发布于2018-08-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果能调用opencv库那是最简单的方法了
    • 发布于2018-08-04
    • 举报
    • 评论 0
    • 0
    • 0

  • 不知道题主基于什么平台,如果是嵌入式系统和Cortex-A系列芯片,可以使用OPENCV解决识别颜色;如果是普通的单片机平台,那就用参考二值化算法,根据每种颜色的边界阈值进行比对,然后判断是什么颜色。
    • 发布于2018-08-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 很简单从RGB数组就可以判断.
    • 发布于2018-08-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个可以使用一个OpenCV的库来进行操作,里面有颜色识别的函数
    • 发布于2018-08-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种建议读取每个区域的RGB值,然后与指定颜色的RGB范围进行比对
    • 发布于2018-08-11
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

摄像头识别技术