python opencv入门 颜色空间转换(9)
2017-07-23 16:59
513 查看
内容来自OpenCV-Python Tutorials 自己翻译整理
目标
学习如何将RGB转换为灰度图,或者RGB转换为HSV
写个程序从一副图像获取某个固定颜色的物体
学习函数cv2.cvtColor(),cv2.inRange()
转换颜色空间
在opencv中有超过150种颜色空间转换方法(震惊-_-)
但是经常用的只有BGR-灰度图和BGR-HSV
使用函数cv2.cvtColor(input_image ,flag),flag是转换类型
BGR和灰度图的转换使用 cv2.COLOR_BGR2GRAY
BGR和HSV的转换使用 cv2.COLOR_BGR2HSV
使用如下命令可以得到可以使用的flags
注意:
HSV空间中,H表示色彩/色度,取值范围 [0,179],S表示饱和度,取值范围 [0,255],V表示亮度,取值范围 [0,255]。但是不同的软件使用值不同
跟踪物体
HSV空间比在BGR空间中更容易表示一个特定的颜色。现在要提取蓝色物体
步骤如下
从视频提取每一帧
将图像转换为HSV空间
设置HSV阈值到蓝色范围
获取蓝色物体,可以对物体操作,比如画圈
其中cv2.inRange函数设定取值范围
文档介绍如下
cv2.inRange(src, lowerb, upperb[, dst]) → dst
src – first input array. 输入矩阵(图像)
lowerb – inclusive lower boundary array or a scalar.阈值下限
upperb – inclusive upper boundary array or a scalar.阈值上限
dst – output array of the same size as src and CV_8U type.输出和src相同的矩阵
对于通道的处理
图像当中有噪音,后面介绍去除噪音的处理
如何找到要跟踪对象的HSV值
可以使用这个函数 cv2.cvtColor(),但是需要输入的参数是BGR值,而不是一副图片。例如,要找到绿色的HSV值
结果
[[[ 60 255 255]]]
现在可以使用 [H-10, 100,100] 和 [H+10, 255, 255] 做阈值上下限。也可以使用其他图像处理软件来转换
练习
同时提取红绿蓝三个不同颜色的物体
原图
处理后
目标
学习如何将RGB转换为灰度图,或者RGB转换为HSV
写个程序从一副图像获取某个固定颜色的物体
学习函数cv2.cvtColor(),cv2.inRange()
转换颜色空间
在opencv中有超过150种颜色空间转换方法(震惊-_-)
但是经常用的只有BGR-灰度图和BGR-HSV
使用函数cv2.cvtColor(input_image ,flag),flag是转换类型
BGR和灰度图的转换使用 cv2.COLOR_BGR2GRAY
BGR和HSV的转换使用 cv2.COLOR_BGR2HSV
使用如下命令可以得到可以使用的flags
import cv2 import numpy as np flags = [i for i in dir(cv2) if i.startswith('COLOR_')] print(flags)
['COLOR_BAYER_BG2BGR', 'COLOR_BAYER_BG2BGR_EA', 'COLOR_BAYER_BG2BGR_VNG', 'COLOR_BAYER_BG2GRAY', 'COLOR_BAYER_BG2RGB', 'COLOR_BAYER_BG2RGB_EA', 'COLOR_BAYER_BG2RGB_VNG', 'COLOR_BAYER_GB2BGR', 'COLOR_BAYER_GB2BGR_EA', 'COLOR_BAYER_GB2BGR_VNG', 'COLOR_BAYER_GB2GRAY', 'COLOR_BAYER_GB2RGB', 'COLOR_BAYER_GB2RGB_EA', 'COLOR_BAYER_GB2RGB_VNG', 'COLOR_BAYER_GR2BGR', 'COLOR_BAYER_GR2BGR_EA', 'COLOR_BAYER_GR2BGR_VNG', 'COLOR_BAYER_GR2GRAY', 'COLOR_BAYER_GR2RGB', 'COLOR_BAYER_GR2RGB_EA', 'COLOR_BAYER_GR2RGB_VNG', 'COLOR_BAYER_RG2BGR', 'COLOR_BAYER_RG2BGR_EA', 'COLOR_BAYER_RG2BGR_VNG', 'COLOR_BAYER_RG2GRAY', 'COLOR_BAYER_RG2RGB', 'COLOR_BAYER_RG2RGB_EA', 'COLOR_BAYER_RG2RGB_VNG', 'COLOR_BGR2BGR555', 'COLOR_BGR2BGR565', 'COLOR_BGR2BGRA', 'COLOR_BGR2GRAY', 'COLOR_BGR2HLS', 'COLOR_BGR2HLS_FULL', 'COLOR_BGR2HSV', 'COLOR_BGR2HSV_FULL', 'COLOR_BGR2LAB', 'COLOR_BGR2LUV', 'COLOR_BGR2Lab', 'COLOR_BGR2Luv', 'COLOR_BGR2RGB', 'COLOR_BGR2RGBA', 'COLOR_BGR2XYZ', 'COLOR_BGR2YCR_CB', 'COLOR_BGR2YCrCb', 'COLOR_BGR2YUV', 'COLOR_BGR2YUV_I420', 'COLOR_BGR2YUV_IYUV', 'COLOR_BGR2YUV_YV12', 'COLOR_BGR5552BGR', 'COLOR_BGR5552BGRA', 'COLOR_BGR5552GRAY', 'COLOR_BGR5552RGB', 'COLOR_BGR5552RGBA', 'COLOR_BGR5652BGR', 'COLOR_BGR5652BGRA', 'COLOR_BGR5652GRAY', 'COLOR_BGR5652RGB', 'COLOR_BGR5652RGBA', 'COLOR_BGRA2BGR', 'COLOR_BGRA2BGR555', 'COLOR_BGRA2BGR565', 'COLOR_BGRA2GRAY', 'COLOR_BGRA2RGB', 'COLOR_BGRA2RGBA', 'COLOR_BGRA2YUV_I420', 'COLOR_BGRA2YUV_IYUV', 'COLOR_BGRA2YUV_YV12', 'COLOR_BayerBG2BGR', 'COLOR_BayerBG2BGR_EA', 'COLOR_BayerBG2BGR_VNG', 'COLOR_BayerBG2GRAY', 'COLOR_BayerBG2RGB', 'COLOR_BayerBG2RGB_EA', 'COLOR_BayerBG2RGB_VNG', 'COLOR_BayerGB2BGR', 'COLOR_BayerGB2BGR_EA', 'COLOR_BayerGB2BGR_VNG', 'COLOR_BayerGB2GRAY', 'COLOR_BayerGB2RGB', 'COLOR_BayerGB2RGB_EA', 'COLOR_BayerGB2RGB_VNG', 'COLOR_BayerGR2BGR', 'COLOR_BayerGR2BGR_EA', 'COLOR_BayerGR2BGR_VNG', 'COLOR_BayerGR2GRAY', 'COLOR_BayerGR2RGB', 'COLOR_BayerGR2RGB_EA', 'COLOR_BayerGR2RGB_VNG', 'COLOR_BayerRG2BGR', 'COLOR_BayerRG2BGR_EA', 'COLOR_BayerRG2BGR_VNG', 'COLOR_BayerRG2GRAY', 'COLOR_BayerRG2RGB', 'COLOR_BayerRG2RGB_EA', 'COLOR_BayerRG2RGB_VNG', 'COLOR_COLORCVT_MAX', 'COLOR_GRAY2BGR', 'COLOR_GRAY2BGR555', 'COLOR_GRAY2BGR565', 'COLOR_GRAY2BGRA', 'COLOR_GRAY2RGB', 'COLOR_GRAY2RGBA', 'COLOR_HLS2BGR', 'COLOR_HLS2BGR_FULL', 'COLOR_HLS2RGB', 'COLOR_HLS2RGB_FULL', 'COLOR_HSV2BGR', 'COLOR_HSV2BGR_FULL', 'COLOR_HSV2RGB', 'COLOR_HSV2RGB_FULL', 'COLOR_LAB2BGR', 'COLOR_LAB2LBGR', 'COLOR_LAB2LRGB', 'COLOR_LAB2RGB', 'COLOR_LBGR2LAB', 'COLOR_LBGR2LUV', 'COLOR_LBGR2Lab', 'COLOR_LBGR2Luv', 'COLOR_LRGB2LAB', 'COLOR_LRGB2LUV', 'COLOR_LRGB2Lab', 'COLOR_LRGB2Luv', 'COLOR_LUV2BGR', 'COLOR_LUV2LBGR', 'COLOR_LUV2LRGB', 'COLOR_LUV2RGB', 'COLOR_Lab2BGR', 'COLOR_Lab2LBGR', 'COLOR_Lab2LRGB', 'COLOR_Lab2RGB', 'COLOR_Luv2BGR', 'COLOR_Luv2LBGR', 'COLOR_Luv2LRGB', 'COLOR_Luv2RGB', 'COLOR_M_RGBA2RGBA', 'COLOR_RGB2BGR', 'COLOR_RGB2BGR555', 'COLOR_RGB2BGR565', 'COLOR_RGB2BGRA', 'COLOR_RGB2GRAY', 'COLOR_RGB2HLS', 'COLOR_RGB2HLS_FULL', 'COLOR_RGB2HSV', 'COLOR_RGB2HSV_FULL', 'COLOR_RGB2LAB', 'COLOR_RGB2LUV', 'COLOR_RGB2Lab', 'COLOR_RGB2Luv', 'COLOR_RGB2RGBA', 'COLOR_RGB2XYZ', 'COLOR_RGB2YCR_CB', 'COLOR_RGB2YCrCb', 'COLOR_RGB2YUV', 'COLOR_RGB2YUV_I420', 'COLOR_RGB2YUV_IYUV', 'COLOR_RGB2YUV_YV12', 'COLOR_RGBA2BGR', 'COLOR_RGBA2BGR555', 'COLOR_RGBA2BGR565', 'COLOR_RGBA2BGRA', 'COLOR_RGBA2GRAY', 'COLOR_RGBA2M_RGBA', 'COLOR_RGBA2RGB', 'COLOR_RGBA2YUV_I420', 'COLOR_RGBA2YUV_IYUV', 'COLOR_RGBA2YUV_YV12', 'COLOR_RGBA2mRGBA', 'COLOR_XYZ2BGR', 'COLOR_XYZ2RGB', 'COLOR_YCR_CB2BGR', 'COLOR_YCR_CB2RGB', 'COLOR_YCrCb2BGR', 'COLOR_YCrCb2RGB', 'COLOR_YUV2BGR', 'COLOR_YUV2BGRA_I420', 'COLOR_YUV2BGRA_IYUV', 'COLOR_YUV2BGRA_NV12', 'COLOR_YUV2BGRA_NV21', 'COLOR_YUV2BGRA_UYNV', 'COLOR_YUV2BGRA_UYVY', 'COLOR_YUV2BGRA_Y422', 'COLOR_YUV2BGRA_YUNV', 'COLOR_YUV2BGRA_YUY2', 'COLOR_YUV2BGRA_YUYV', 'COLOR_YUV2BGRA_YV12', 'COLOR_YUV2BGRA_YVYU', 'COLOR_YUV2BGR_I420', 'COLOR_YUV2BGR_IYUV', 'COLOR_YUV2BGR_NV12', 'COLOR_YUV2BGR_NV21', 'COLOR_YUV2BGR_UYNV', 'COLOR_YUV2BGR_UYVY', 'COLOR_YUV2BGR_Y422', 'COLOR_YUV2BGR_YUNV', 'COLOR_YUV2BGR_YUY2', 'COLOR_YUV2BGR_YUYV', 'COLOR_YUV2BGR_YV12', 'COLOR_YUV2BGR_YVYU', 'COLOR_YUV2GRAY_420', 'COLOR_YUV2GRAY_I420', 'COLOR_YUV2GRAY_IYUV', 'COLOR_YUV2GRAY_NV12', 'COLOR_YUV2GRAY_NV21', 'COLOR_YUV2GRAY_UYNV', 'COLOR_YUV2GRAY_UYVY', 'COLOR_YUV2GRAY_Y422', 'COLOR_YUV2GRAY_YUNV', 'COLOR_YUV2GRAY_YUY2', 'COLOR_YUV2GRAY_YUYV', 'COLOR_YUV2GRAY_YV12', 'COLOR_YUV2GRAY_YVYU', 'COLOR_YUV2RGB', 'COLOR_YUV2RGBA_I420', 'COLOR_YUV2RGBA_IYUV', 'COLOR_YUV2RGBA_NV12', 'COLOR_YUV2RGBA_NV21', 'COLOR_YUV2RGBA_UYNV', 'COLOR_YUV2RGBA_UYVY', 'COLOR_YUV2RGBA_Y422', 'COLOR_YUV2RGBA_YUNV', 'COLOR_YUV2RGBA_YUY2', 'COLOR_YUV2RGBA_YUYV', 'COLOR_YUV2RGBA_YV12', 'COLOR_YUV2RGBA_YVYU', 'COLOR_YUV2RGB_I420', 'COLOR_YUV2RGB_IYUV', 'COLOR_YUV2RGB_NV12', 'COLOR_YUV2RGB_NV21', 'COLOR_YUV2RGB_UYNV', 'COLOR_YUV2RGB_UYVY', 'COLOR_YUV2RGB_Y422', 'COLOR_YUV2RGB_YUNV', 'COLOR_YUV2RGB_YUY2', 'COLOR_YUV2RGB_YUYV', 'COLOR_YUV2RGB_YV12', 'COLOR_YUV2RGB_YVYU', 'COLOR_YUV420P2BGR', 'COLOR_YUV420P2BGRA', 'COLOR_YUV420P2GRAY', 'COLOR_YUV420P2RGB', 'COLOR_YUV420P2RGBA', 'COLOR_YUV420SP2BGR', 'COLOR_YUV420SP2BGRA', 'COLOR_YUV420SP2GRAY', 'COLOR_YUV420SP2RGB', 'COLOR_YUV420SP2RGBA', 'COLOR_YUV420p2BGR', 'COLOR_YUV420p2BGRA', 'COLOR_YUV420p2GRAY', 'COLOR_YUV420p2RGB', 'COLOR_YUV420p2RGBA', 'COLOR_YUV420sp2BGR', 'COLOR_YUV420sp2BGRA', 'COLOR_YUV420sp2GRAY', 'COLOR_YUV420sp2RGB', 'COLOR_YUV420sp2RGBA', 'COLOR_mRGBA2RGBA']
注意:
HSV空间中,H表示色彩/色度,取值范围 [0,179],S表示饱和度,取值范围 [0,255],V表示亮度,取值范围 [0,255]。但是不同的软件使用值不同
跟踪物体
HSV空间比在BGR空间中更容易表示一个特定的颜色。现在要提取蓝色物体
步骤如下
从视频提取每一帧
将图像转换为HSV空间
设置HSV阈值到蓝色范围
获取蓝色物体,可以对物体操作,比如画圈
import cv2 import numpy as np cap=cv2.VideoCapture(0) while(1): ret,frame=cap.read()#读取视频帧 hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)#HSV空间 lower_blue=np.array([110,50,50])#设定蓝色的阈值 upper_blue=np.array([130,255,255]) mask=cv2.inRange(hsv,lower_blue,upper_blue)#设定取值范围 res=cv2.bitwise_and(frame,frame,mask=mask)#对原图像处理 cv2.imshow('frame',frame) cv2.imshow('mask',mask) cv2.imshow('res',res) k=cv2.waitKey(5)&0xFF if k==27: break cv2.destroyAllWindows()
其中cv2.inRange函数设定取值范围
文档介绍如下
cv2.inRange(src, lowerb, upperb[, dst]) → dst
src – first input array. 输入矩阵(图像)
lowerb – inclusive lower boundary array or a scalar.阈值下限
upperb – inclusive upper boundary array or a scalar.阈值上限
dst – output array of the same size as src and CV_8U type.输出和src相同的矩阵
对于通道的处理
图像当中有噪音,后面介绍去除噪音的处理
如何找到要跟踪对象的HSV值
可以使用这个函数 cv2.cvtColor(),但是需要输入的参数是BGR值,而不是一副图片。例如,要找到绿色的HSV值
import cv2 import numpy as np green = np.uint8([[[0,255,0 ]]]) hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV) print(hsv_green)
结果
[[[ 60 255 255]]]
现在可以使用 [H-10, 100,100] 和 [H+10, 255, 255] 做阈值上下限。也可以使用其他图像处理软件来转换
练习
同时提取红绿蓝三个不同颜色的物体
原图
import cv2 import numpy as np img = cv2.imread("3.jpg") hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#HSV空间 lower_blue=np.array([110,100,100])#blue upper_blue=np.array([130,255,255]) lower_green=np.array([60,100,100])#green upper_green=np.array([70,255,255]) lower_red=np.array([0,100,100])#red upper_red=np.array([10,255,255]) red_mask=cv2.inRange(hsv,lower_red,upper_red)#取红色 blue_mask=cv2.inRange(hsv,lower_blue,upper_blue)#蓝色 green_mask=cv2.inRange(hsv,lower_green,upper_green)#绿色 red=cv2.bitwise_and(img,img,mask=red_mask)#对原图像处理 green=cv2.bitwise_and(img,img,mask=green_mask) blue=cv2.bitwise_and(img,img,mask=blue_mask) res=green+red+blue cv2.imshow('img',res) cv2.waitKey(0) cv2.destroyAllWindows()
处理后
相关文章推荐
- python3-opencv库(3)--图片颜色空间转换,利用HSV进行物体跟踪,图像通道分离与合并
- opencv-python 读取图像并转换颜色空间
- opencv for python(8) 利用颜色空间转换进行物体跟踪
- opencv-python(7):颜色空间转换
- 【OpenCV3】颜色空间转换——cv::cvtColor()详解
- 【opencv+python教程笔记】1. 颜色空间,二值化
- 【OpenCV】 RGB和CIEXYZ颜色空间的转换及相关优化。
- 基于Tkinter利用python实现颜色空间转换程序
- python opencv入门(读 / 写 显示以及转换图像 和 视频读入)
- OpenCV学习笔记--颜色空间及转换
- learn opencv-OpenCV中的颜色空间(C ++ / Python)
- opencv学习笔记之六 颜色空间的转换
- OpenCV Using Python——RGB颜色空间中的统计肤色模型
- openCV—Python(7)—— 彩色图像R、G、B分量的提取与合并及其相关颜色空间的转化
- Python + OpenCV颜色空间(Color Space)
- opencv:颜色空间转换、点表示、颜色表示
- 【OpenCV3图像处理】颜色空间转换(二)转换函数 cvtColor()
- 【基于C++和Python的Opencv3学习笔记之颜色空间缩减、ROI提取及多通道分离合并】
- opencv学习(十六)之颜色空间转换cvtColor()
- opencv: 颜色空间转换(cv2.cvtColor) 探究(图示+源码)