引言:当我们在选取颜色特征作为目标筛选的第一个条件时,我们经常使用空间转换,即将将RGB图像转换到HSV空间中,具体为什么?(小编目前还没能够理解!如果你们有知道的,请告诉小编,万分感谢!!!)我现在只能说是约定俗成这个表达。HSV颜色空间如图所示。(来自百度,好像侵权了,在此声明一下)
HSV颜色空间
首先小琼先说一下接下来的大体流程与思路:首先是图像读取、将RGB图像转换到HSV空间,生成掩码图像(此部分就是已提取到的颜色图像,也就是在图像中你所指定颜色的那部分,注意此时得到的是二值化图像)然后将得到的图像进行形态学处理,取出干扰噪点(此部分相当于是图像的优化、美化),最后利用面积大小筛选出目标图像,去除难以消除的干扰的噪点,最后和原图像进行与运算,致此结束(大体思路明白了吗?爱学习的小伙伴梦!!!)。
1.首先读取源图像:(首先应该是函数库导入,草率了)
代码:
import cv2 import numpy as np img = cv2.imread('./cat1.png') cv2.imshow('img', img)效果展示:
原图像
2.然后是空间转化。
代码:
l_g= np.array([35, 43, 46]) u_g = np.array([77, 255, 255]) hsvimg = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)#将RGB转换到HSV色域空间 cv2.imshow('hsvimg', hsvimg)效果展示:
HSV色域空间下的图像
3.然后就是掩码生成。
代码:
mask = cv2.inRange(hsvimg, l_g, u_g) cv2.imshow('mas', mask)效果展示:
HSV色域空间图像掩码
因为在此处虽然提取到了目标图像,但是干扰的噪声较多,所以必须去除。
4.形态学处理。
代码:
kernel=(5,5) kernel1=(3,3) kernel2=(7,7) mask=cv2.dilate(mask,kern,iterations=1) #腐蚀 cv2.imshow('M', mask) opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN,kern,iterations=2) cv2.imshow('opening', opening)效果展示:
M 图像
opening图像
在此因为小琼只想去除噪声,所以采用腐蚀和开运算处理。
5.消去小面积区域:
代码:
for contour in contours: area = cv2.contourArea(contour) if area <=500: cv_contours.append(contour) else: pass展示效果:
消去小面积区域
6.与原图像与运算。
代码:
res = cv2.bitwise_and(img, img, mask=mask) cv2.imshow('Result', res)显示效果:
成功提取到草坪
是不是草率了,还以为小琼提取猫!!!O(∩_∩)O哈哈~(自己尝试)
7.结束:
GAME OVER
如果理解错误,欢迎大家批评,及时纠正小琼的错误哦,真心感谢你的纠正!!!
如果小伙伴梦有疑问欢迎在评论区留言哦!!!
如果感觉不错的话!点个赞呗,不用客气!(O(∩_∩)O哈哈~)
欢迎和小伙伴梦一起学习,共同努力,加油!!!



