python3-opencv库(3)--图片颜色空间转换,利用HSV进行物体跟踪,图像通道分离与合并
2018-02-23 19:36
2516 查看
版权声明:转载请注明原作者及出处from cv2 import cv2 #或者import cv2
import numpy as np
"""H(hue)色调 0~180;S(saturation)饱和度 0~255;V(value) 0~255
具体参见HSV颜色空间的百度百科"""
def extract_object_demo():
"""通过颜色过滤的方法来跟踪捕获视屏中的物体"""
"""本函数就是一个追踪视频中绿色物体的程序"""
capture = cv2.VideoCapture("D:/movie/星际牛仔BD/星际牛仔Session8ワルツ_フォー_ヴィーナスWaltzForVenus.MP4")
#选择打开一个视屏
while True:
ret, frame = capture.read()
#从视频中一帧一帧地读取图像
if ret == False:
break
#判断是否读取正确,读取失败(比如视屏结束)则会终止循环,所以ret是个判断读取是否正确的返回量
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
#将视屏每一帧转换成HSV图像
lower_hsv = np.array([35, 43, 46],dtype=np.uint8)
#设置HSV范围下限(是长度为3的1D数组,三个元素分别表示H,S,V的下限)
upper_hsv = np.array([77, 255, 255],dtype=np.uint8)
#设置HSV范围上限(是长度为3的1D数组,三个元素分别表示H,S,V的上限)
#hsv处于该范围内的就是广义的绿色,我们就是为了把绿色筛选出来,颜色与HSV值得对应见下方的表
mask = cv2.inRange(hsv,lower_hsv,upper_hsv)
#第一参数为待处理的图像,第二参数为HSV范围下限,第三参数为HSV范围上限
'''cv2.inRange()方法对每一帧图像进行处理,凡是HSV值处在范围内的像素,
一律为白色,范围外的一律为黑色,最后返回一张二值化的图,所谓二值化,就
是全图只有黑白两色,即mask'''
cv2.imshow("video_initia",frame)
cv2.imshow("video_hsv",hsv)
cv2.imshow("video_mask",mask)
k = cv2.waitKey(20) #设置成按Esc键退出循环
if k == 27:
break
def color_space_demo(img):
"""颜色空间的转换BGR--->HSV"""
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#转换成灰度图
cv2.imshow("gray_img",gray)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#转换成HSV
cv2.imshow("hsv_img",hsv)
yuv = cv2.cvtColor(img,cv2.COLOR_BGR2YUV)
#转换成YUV
cv2.imshow("yuv_img",yuv)
ycrcb = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
#转换成YCrCb
cv2.imshow("ycrcb_img",ycrcb)
print("----------hello python!----------")
src = cv2.imread("Z.PNG")
t1 = cv2.getTickCount()
#=======================================================
color_space_demo(src) #演示各种颜色空间之间的转换
extract_object_demo() #演示通过颜色过滤来跟踪视频中的物体
#=======================================================
t2 = cv2.getTickCount()
time = (t2-t1)*1000/cv2.getTickFrequency()
print("耗时:%s" % time)
cv2.waitKey(0)
cv2.destroyAllWindows()如何知道各种颜色对应的HSV范围?参见下表
由于HSV是基于人类对颜色感觉而定制的标准,所以每种颜色都是用一个范围来表示
三通道图像的通道分离以及三个单通道图像的通道合并
import numpy as np
"""H(hue)色调 0~180;S(saturation)饱和度 0~255;V(value) 0~255
具体参见HSV颜色空间的百度百科"""
def extract_object_demo():
"""通过颜色过滤的方法来跟踪捕获视屏中的物体"""
"""本函数就是一个追踪视频中绿色物体的程序"""
capture = cv2.VideoCapture("D:/movie/星际牛仔BD/星际牛仔Session8ワルツ_フォー_ヴィーナスWaltzForVenus.MP4")
#选择打开一个视屏
while True:
ret, frame = capture.read()
#从视频中一帧一帧地读取图像
if ret == False:
break
#判断是否读取正确,读取失败(比如视屏结束)则会终止循环,所以ret是个判断读取是否正确的返回量
hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
#将视屏每一帧转换成HSV图像
lower_hsv = np.array([35, 43, 46],dtype=np.uint8)
#设置HSV范围下限(是长度为3的1D数组,三个元素分别表示H,S,V的下限)
upper_hsv = np.array([77, 255, 255],dtype=np.uint8)
#设置HSV范围上限(是长度为3的1D数组,三个元素分别表示H,S,V的上限)
#hsv处于该范围内的就是广义的绿色,我们就是为了把绿色筛选出来,颜色与HSV值得对应见下方的表
mask = cv2.inRange(hsv,lower_hsv,upper_hsv)
#第一参数为待处理的图像,第二参数为HSV范围下限,第三参数为HSV范围上限
'''cv2.inRange()方法对每一帧图像进行处理,凡是HSV值处在范围内的像素,
一律为白色,范围外的一律为黑色,最后返回一张二值化的图,所谓二值化,就
是全图只有黑白两色,即mask'''
cv2.imshow("video_initia",frame)
cv2.imshow("video_hsv",hsv)
cv2.imshow("video_mask",mask)
k = cv2.waitKey(20) #设置成按Esc键退出循环
if k == 27:
break
def color_space_demo(img):
"""颜色空间的转换BGR--->HSV"""
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#转换成灰度图
cv2.imshow("gray_img",gray)
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#转换成HSV
cv2.imshow("hsv_img",hsv)
yuv = cv2.cvtColor(img,cv2.COLOR_BGR2YUV)
#转换成YUV
cv2.imshow("yuv_img",yuv)
ycrcb = cv2.cvtColor(img,cv2.COLOR_BGR2YCrCb)
#转换成YCrCb
cv2.imshow("ycrcb_img",ycrcb)
print("----------hello python!----------")
src = cv2.imread("Z.PNG")
t1 = cv2.getTickCount()
#=======================================================
color_space_demo(src) #演示各种颜色空间之间的转换
extract_object_demo() #演示通过颜色过滤来跟踪视频中的物体
#=======================================================
t2 = cv2.getTickCount()
time = (t2-t1)*1000/cv2.getTickFrequency()
print("耗时:%s" % time)
cv2.waitKey(0)
cv2.destroyAllWindows()如何知道各种颜色对应的HSV范围?参见下表
由于HSV是基于人类对颜色感觉而定制的标准,所以每种颜色都是用一个范围来表示
三通道图像的通道分离以及三个单通道图像的通道合并
from cv2 import cv2 #或者import cv2 import numpy as np print("--------------------hello python!--------------------") src = cv2.imread("Z.PNG") t1 = cv2.getTickCount() #==================================================================== b, g, r = cv2.split(src) #通道分离,把一副三通道图像分成3个单通道图像 cv2.imshow("blue",b) #展示分离后每个通道作为单通道图像的灰度图 cv2.imshow("green",g) cv2.imshow("red",r) img = cv2.merge([b,g,r]) #通道合并 cv2.imshow("merge_img",img) #展示合并后的图 #==================================================================== t2 = cv2.getTickCount() time = (t2-t1)*1000/cv2.getTickFrequency() print("耗时:%s" % time) cv2.waitKey(0) cv2.destroyAllWindows()
相关文章推荐
- opencv for python(8) 利用颜色空间转换进行物体跟踪
- 【基于C++和Python的Opencv3学习笔记之颜色空间缩减、ROI提取及多通道分离合并】
- 【opencv+python】图像处理之一、颜色空间RGB,Gray与HSV
- 将图片转换到HSV空间对图片中特定颜色进行识别
- 6-python图像处理opencv(2.图像像素访问,通道分离与合并)
- python OpenCV 图像通道分离和合并 (四)
- openCV—Python(7)—— 彩色图像R、G、B分量的提取与合并及其相关颜色空间的转化
- OpenCV Python教程之图像元素的访问、通道分离与合并
- python opencv 图片通道分离与合并
- opencv-python 读取图像并转换颜色空间
- OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并
- Python笔记——python OpenCV 图像通道分离和合并
- python OpenCV 图像通道分离和合并 (四)
- OpenCV Python教程(2、图像元素的访问、通道分离与合并)
- opencv之Rgb图像转化到HSV、Lab空间,对各通道的操作
- opencv学习(十四)之图像颜色通道分离和融合
- OpenCV 图像分离颜色通道 split函数和mege函数的运用
- android使用opencv之图片颜色分离与合并操作
- 【OpenCV3图像处理】图像通道分离、通道合并、图像叠加混合
- Opencv图像识别从零到精通(31)----图像修补,分离合并通道