TA的每日心情 | 开心 2019-5-31 10:27 |
---|
签到天数: 98 天 连续签到: 1 天 [LV.6]常住居民II
|
本帖最后由 ky123 于 2018-1-31 14:13 编辑
大家好,我又来了,吔,记性不好,忘记拿东西了!你们先留在此地不要走动,我回去给你们拿几个橘子。
今天趁搬砖的时候工头不注意,偷偷又学了会儿openCV的基础知识,发现我在操作图像之前,是需要先做一下颜色空间变换的,所以今天的任务就是这个。照例感谢易络盟,感谢爱板网,感谢管理大大。
在计算机视觉的领域,应用HSV/HIS颜色模型,相较于RGB与CMYK模型更加符合人眼对颜色的感觉。当采用基础颜色空间RGB模型颜色模型时,除了不均匀与空间不正交这些不足以外,也就是说,直观性差也是一主要的缺陷。比如你无法从给定的3个R、G、B值来感知颜色。而采用HSV颜色模型时H坐标就表示色调,判断一种颜色只需要根据他的H坐标而不用去计算3刺激值。
一般保存在计算机中的图像都是以RGB颜色模型来定义颜色的,因此在图像处理之前需要进行颜色空间的转换。 在openCV中,BGR↔HSV是相当简单的,只需要调用一个库中的一个函数即可完成转换。
我们用到的函数是cv2.cvtColor(input_imageflag),其中flag就是转换类型。对于BGR↔HSV的转换我们用的flag就是cv2.COLOR_BGR2HSV。下图就是BGR↔HSV的图像对比。
OK,BGR 换到 HSV 完成了,下来我们利用 一点来提取带有某个特定色的物体。在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在 OpenCV 的 HSV 格式中,H的取值范围是 [0,179], S的取值范围 [0,255],V的取值范围 [0,255]。比如说,我们现在要提取保留“999绿色块”的图像,滤掉其他背景,按照下面的步骤来即可:
• 从视频中获取每一帧图像
• 将图像换到 HSV 空间
• 设置 HSV 阀值到“999绿色块”范围。
• 获取“999绿色块”
------------------------------------------------------------------
#-*-coding:utf-8-*-
import cv2.cv
#import cv2.cv as cv
import numpy as np
# get video from USB camera
cap = cv2.VideoCapture(0)
#Set the size of video as 640*480
cap.set(3,640)
cap.set(4,480)
cv2.namedWindow('HSV')
cv2.namedWindow('camrea')
while(1):
ret, frame = cap.read()
#converting to HSV
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
lower_green = np.array([50,100,100])
upper_green = np.array([160,255,255])
mask = cv2.inRange(hsv,lower_green,upper_green)
hsv = cv2.bitwise_and(frame,frame,mask=mask)
cv2.imshow('HSV',hsv)
cv2.imshow('camrea',frame)
#Hold the video windos
cv2.waitKey(1)
cap.release()
cv2.destroyAllWindows()
------------------------------------------------------------------
一波操作过后,世界就只剩绿色了(左边图像),非绿的都变成了黑色的背景(光线不好,手电筒补光)。绿色好啊,环保健康,憨厚老实,积极向上,朝气蓬勃,原谅你了。
|
|