图像处理中,颜色是一个很重要的属性。很多同学都以为颜色只有红、橙、黄、绿、青、蓝、紫这几种颜色。事实上并不是这样的。如果我们以红、蓝、绿为基色,其他颜色都是以这三种颜色为基础搭配而成的话,那么颜色的种类应该有256 * 256* 256这么多。这就是为什么,很多知名的消费品每一次在产品发布会的时候都要精心挑选几种颜色供大家挑选。
那么,作为图像处理来说,如果要识别筛选某种颜色的话,是不是直接从r、g、b里面筛选一个范围就可以实现这个目标呢?这样其实是可以的,但是不准确。一种更好的办法是先将图像从rgb转化为h、s、v。这里的h是色度,s是饱和度,v是亮度。如果需要挑选一个颜色的话,那么选择对应的h、s、v范围即可。
还记得在大学本科论文设计的时候,当时的论文题目叫彩色图像的增强显示。那个时候只是知道r、g、b,并不知道h、s、v,所以就在rgb通道上面做了各种增强方法,比如说直方图均衡等等,虽然也有一定的效果,但是那个效果真是惨不忍睹。
hsv本身是为了提取特定的区域范围,这部分相当于代替了算子运算、二值化运算,后期的区域分割、属性过滤、ocr识别、发送命令,这部分还是一样,和之前的流程没有什么差别。下面说说应该怎么做一个颜色提取,首先需要明确颜色范围,大家可以参考这篇blog,地址在这,https://blog.csdn.net/zhangdongren/article/details/98941445
接着就可以自己写一个python+opencv的代码来进行处理,比如像这样,原来代码的地址在这,https://www.cnblogs.com/puheng/p/9228473.html
import cv2
import numpy as np
lower_blue=np.array([110,50,50])
upper_blue=np.array([130,255,255])
img1=cv2.imread("car.png")
xsize,ysize,channel=img1.shape
img1=cv2.resize(img1,(ysize,xsize))
frame=cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)
mask_blue=cv2.inRange(frame,lower_blue,upper_blue)
res_blue=cv2.bitwise_and(frame,frame,mask=mask_blue)
res_blue=cv2.cvtColor(res_blue,cv2.COLOR_HSV2BGR)
cv2.imshow("mask_blue",mask_blue)
cv2.imshow("res_blue",res_blue)
cv2.waitKey(0)
cv2.destroyAllWindows()
先准备一个有蓝色车牌的图片,命名为car.png,比如像这样
直接输入python执行语句,比如说python demo.py,不出意外就可以得到这样的结果,
这样,通过一个颜色,就可以比较容易的将需要的物体从图像中识别出来了。
阅读量:703
点赞量:0
收藏量:0