【OpenCV-Python】教程:3-1 颜色空间转换与抠图
2023-09-14 09:01:40 时间
OpenCV 颜色空间转换
【目标】
- 学会使用 OpenCV 的颜色空间转换
【代码】
# Convert BGR to HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of blue color in HSV
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)
【接口】
// 将图像从一个颜色空间转换到另一个颜色空间
// - src: 输入图像, 无符号8位,16位或者单精度浮点数
// - dst: 输出图像,尺寸和深度与原图像一致src.
// - code: 编码较多
// dstCn number of channels in the destination image; if the parameter is 0, the number of the channels is derived automatically from src and code.
void cv::cvtColor ( InputArray src,
OutputArray dst,
int code,
int dstCn = 0
);
// 将 2个 Planes 的图像从颜色空间转换到另一个颜色空间
// 只支持 YUV420 到 RGB 的转换
// src1: Y plane 为 8位图像 (CV_8U)
// src2: 包含U/V 通道
// dst: 输出结果图像
// code:
// COLOR_YUV2BGR_NV12
// COLOR_YUV2RGB_NV12
// COLOR_YUV2BGRA_NV12
// COLOR_YUV2RGBA_NV12
// COLOR_YUV2BGR_NV21
// COLOR_YUV2RGB_NV21
// COLOR_YUV2BGRA_NV21
// COLOR_YUV2RGBA_NV21
void cv::cvtColorTwoPlane(InputArray src1,
InputArray src2,
OutputArray dst,
int code
);
# // 将图像从一个颜色空间转换到另一个颜色空间
cv2.cvtColor( src, code[, dst[, dstCn]] ) -> dst
# // 将 2个 Planes 的图像从颜色空间转换到另一个颜色空间
# // 只支持 YUV420 到 RGB 的转换
# // src1: Y plane 为 8位图像 (CV_8U)
# // src2: 包含U/V 通道
# // dst: 输出结果图像
# // code:
# // COLOR_YUV2BGR_NV12
# // COLOR_YUV2RGB_NV12
# // COLOR_YUV2BGRA_NV12
# // COLOR_YUV2RGBA_NV12
# // COLOR_YUV2BGR_NV21
# // COLOR_YUV2RGB_NV21
# // COLOR_YUV2BGRA_NV21
# // COLOR_YUV2RGBA_NV21
cv2.cvtColorTwoPlane( src1, src2, code[, dst] ) -> dst
【吃个栗子】
OpenCV
Python
绿幕抠图, 将皮肤,红色裙子和绿幕分别抠出来。
import cv2
import numpy as np
# 读入图片
greenim = cv2.imread("green.jpeg")
cv2.namedWindow("green")
def nothing(x):
pass
cv2.createTrackbar('HMin', 'green', 0, 180, nothing)
cv2.createTrackbar('HMax', 'green', 0, 180, nothing)
cv2.createTrackbar('SMin', 'green', 0, 255, nothing)
cv2.createTrackbar('SMax', 'green', 0, 255, nothing)
cv2.createTrackbar('VMin', 'green', 0, 255, nothing)
cv2.createTrackbar('VMax', 'green', 0, 255, nothing)
cv2.setTrackbarPos('HMax', 'green', 180)
cv2.setTrackbarPos('SMax', 'green', 255)
cv2.setTrackbarPos('VMax', 'green', 255)
cv2.imshow("green", greenim)
cv2.waitKey(0)
# 在图像上写文字
font = cv2.FONT_HERSHEY_SIMPLEX
while(1):
# cv2.imshow("green", greenim)
if cv2.waitKey(1) & 0xFF == 27:
break
# 获得位置
hmin = cv2.getTrackbarPos('HMin', 'green')
hmax = cv2.getTrackbarPos('HMax', 'green')
smin = cv2.getTrackbarPos('SMin', 'green')
smax = cv2.getTrackbarPos('SMax', 'green')
vmin = cv2.getTrackbarPos('VMin', 'green')
vmax = cv2.getTrackbarPos('VMax', 'green')
# 取最小值和最大值
hmin, hmax = min(hmin, hmax), max(hmin, hmax)
smin, smax = min(smin, smax), max(smin, smax)
vmin, vmax = min(vmin, vmax), max(vmin, vmax)
hsvgreenim = cv2.cvtColor(greenim, cv2.COLOR_BGR2HSV)
# 绿色的最小值和最大值
lower_green = np.array([hmin, smin, vmin])
upper_green = np.array([hmax, smax, vmax])
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsvgreenim, lower_green, upper_green)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(greenim, greenim, mask=mask)
textstr = "hmin:" + str(hmin) + "-" +\
"hmax:" + str(hmax) + " | " +\
"vmin:" + str(vmin) + "-" +\
"vmax:" + str(vmax) + " | " +\
"smin:" + str(smin) + "-" +\
"smax:" + str(smax)
cv2.putText(res, textstr, (20, 20), font, 0.5,
(0, 0, 255), 1, cv2.LINE_AA)
cv2.imshow("green", greenim)
cv2.imshow("mask", mask)
cv2.imshow("res", res)
cv2.imshow("green", greenim)
cv2.waitKey(0)
cv2.destroyAllWindows()
皮肤抠出来的效果图
红色裙子抠出来的效果图
绿幕抠出来或者人体抠出来的效果图
【扩展】
colorflags = [
'COLOR_BAYER_BG2BGR', 'COLOR_BAYER_BG2BGRA', 'COLOR_BAYER_BG2BGR_EA',
'COLOR_BAYER_BG2BGR_VNG', 'COLOR_BAYER_BG2GRAY', 'COLOR_BAYER_BG2RGB',
'COLOR_BAYER_BG2RGBA', 'COLOR_BAYER_BG2RGB_EA', 'COLOR_BAYER_BG2RGB_VNG',
'COLOR_BAYER_BGGR2BGR', 'COLOR_BAYER_BGGR2BGRA', 'COLOR_BAYER_BGGR2BGR_EA',
'COLOR_BAYER_BGGR2BGR_VNG', 'COLOR_BAYER_BGGR2GRAY', 'COLOR_BAYER_BGGR2RGB',
'COLOR_BAYER_BGGR2RGBA', 'COLOR_BAYER_BGGR2RGB_EA', 'COLOR_BAYER_BGGR2RGB_VNG',
'COLOR_BAYER_GB2BGR', 'COLOR_BAYER_GB2BGRA', 'COLOR_BAYER_GB2BGR_EA',
'COLOR_BAYER_GB2BGR_VNG', 'COLOR_BAYER_GB2GRAY', 'COLOR_BAYER_GB2RGB',
'COLOR_BAYER_GB2RGBA', 'COLOR_BAYER_GB2RGB_EA', 'COLOR_BAYER_GB2RGB_VNG',
'COLOR_BAYER_GBRG2BGR', 'COLOR_BAYER_GBRG2BGRA', 'COLOR_BAYER_GBRG2BGR_EA',
'COLOR_BAYER_GBRG2BGR_VNG', 'COLOR_BAYER_GBRG2GRAY', 'COLOR_BAYER_GBRG2RGB',
'COLOR_BAYER_GBRG2RGBA', 'COLOR_BAYER_GBRG2RGB_EA', 'COLOR_BAYER_GBRG2RGB_VNG',
'COLOR_BAYER_GR2BGR', 'COLOR_BAYER_GR2BGRA', 'COLOR_BAYER_GR2BGR_EA',
'COLOR_BAYER_GR2BGR_VNG', 'COLOR_BAYER_GR2GRAY', 'COLOR_BAYER_GR2RGB',
'COLOR_BAYER_GR2RGBA', 'COLOR_BAYER_GR2RGB_EA', 'COLOR_BAYER_GR2RGB_VNG',
'COLOR_BAYER_GRBG2BGR', 'COLOR_BAYER_GRBG2BGRA', 'COLOR_BAYER_GRBG2BGR_EA',
'COLOR_BAYER_GRBG2BGR_VNG', 'COLOR_BAYER_GRBG2GRAY', 'COLOR_BAYER_GRBG2RGB',
'COLOR_BAYER_GRBG2RGBA', 'COLOR_BAYER_GRBG2RGB_EA', 'COLOR_BAYER_GRBG2RGB_VNG',
'COLOR_BAYER_RG2BGR', 'COLOR_BAYER_RG2BGRA', 'COLOR_BAYER_RG2BGR_EA',
'COLOR_BAYER_RG2BGR_VNG', 'COLOR_BAYER_RG2GRAY', 'COLOR_BAYER_RG2RGB',
'COLOR_BAYER_RG2RGBA', 'COLOR_BAYER_RG2RGB_EA', 'COLOR_BAYER_RG2RGB_VNG',
'COLOR_BAYER_RGGB2BGR', 'COLOR_BAYER_RGGB2BGRA', 'COLOR_BAYER_RGGB2BGR_EA',
'COLOR_BAYER_RGGB2BGR_VNG', 'COLOR_BAYER_RGGB2GRAY', 'COLOR_BAYER_RGGB2RGB',
'COLOR_BAYER_RGGB2RGBA', 'COLOR_BAYER_RGGB2RGB_EA', 'COLOR_BAYER_RGGB2RGB_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_BayerBG2BGRA', 'COLOR_BayerBG2BGR_EA', 'COLOR_BayerBG2BGR_VNG',
'COLOR_BayerBG2GRAY', 'COLOR_BayerBG2RGB', 'COLOR_BayerBG2RGBA',
'COLOR_BayerBG2RGB_EA', 'COLOR_BayerBG2RGB_VNG', 'COLOR_BayerBGGR2BGR',
'COLOR_BayerBGGR2BGRA', 'COLOR_BayerBGGR2BGR_EA', 'COLOR_BayerBGGR2BGR_VNG',
'COLOR_BayerBGGR2GRAY', 'COLOR_BayerBGGR2RGB', 'COLOR_BayerBGGR2RGBA',
'COLOR_BayerBGGR2RGB_EA', 'COLOR_BayerBGGR2RGB_VNG', 'COLOR_BayerGB2BGR',
'COLOR_BayerGB2BGRA', 'COLOR_BayerGB2BGR_EA', 'COLOR_BayerGB2BGR_VNG',
'COLOR_BayerGB2GRAY', 'COLOR_BayerGB2RGB', 'COLOR_BayerGB2RGBA',
'COLOR_BayerGB2RGB_EA', 'COLOR_BayerGB2RGB_VNG', 'COLOR_BayerGBRG2BGR',
'COLOR_BayerGBRG2BGRA', 'COLOR_BayerGBRG2BGR_EA', 'COLOR_BayerGBRG2BGR_VNG',
'COLOR_BayerGBRG2GRAY', 'COLOR_BayerGBRG2RGB', 'COLOR_BayerGBRG2RGBA',
'COLOR_BayerGBRG2RGB_EA', 'COLOR_BayerGBRG2RGB_VNG', 'COLOR_BayerGR2BGR',
'COLOR_BayerGR2BGRA', 'COLOR_BayerGR2BGR_EA', 'COLOR_BayerGR2BGR_VNG',
'COLOR_BayerGR2GRAY', 'COLOR_BayerGR2RGB', 'COLOR_BayerGR2RGBA',
'COLOR_BayerGR2RGB_EA', 'COLOR_BayerGR2RGB_VNG', 'COLOR_BayerGRBG2BGR',
'COLOR_BayerGRBG2BGRA', 'COLOR_BayerGRBG2BGR_EA', 'COLOR_BayerGRBG2BGR_VNG',
'COLOR_BayerGRBG2GRAY', 'COLOR_BayerGRBG2RGB', 'COLOR_BayerGRBG2RGBA',
'COLOR_BayerGRBG2RGB_EA', 'COLOR_BayerGRBG2RGB_VNG', 'COLOR_BayerRG2BGR',
'COLOR_BayerRG2BGRA', 'COLOR_BayerRG2BGR_EA', 'COLOR_BayerRG2BGR_VNG',
'COLOR_BayerRG2GRAY', 'COLOR_BayerRG2RGB', 'COLOR_BayerRG2RGBA',
'COLOR_BayerRG2RGB_EA', 'COLOR_BayerRG2RGB_VNG', 'COLOR_BayerRGGB2BGR',
'COLOR_BayerRGGB2BGRA', 'COLOR_BayerRGGB2BGR_EA', 'COLOR_BayerRGGB2BGR_VNG',
'COLOR_BayerRGGB2GRAY', 'COLOR_BayerRGGB2RGB', 'COLOR_BayerRGGB2RGBA',
'COLOR_BayerRGGB2RGB_EA', 'COLOR_BayerRGGB2RGB_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']
Python
版本的需要在 COLOR_
前加上 cv2.
。
【参考】
相关文章
- 鲲鹏云实验-Python+Jupyter机器学习基础环境
- NLP python库 nltk 安装
- Python 图像处理 OpenCV (15):图像轮廓
- Python字符和字符值(ASCII或Unicode码值)转换方法
- Python每日一练(20230304)
- 【OpenCV-Python】教程:3-13 Hough直线变换
- 华为OD机试 - 最多几个直角三角形(Java & JS & Python)
- 七夕最浪漫的表白,最真挚的感情(Python代码实现)
- python必须要注意的几个代码规范
- python 读取音频文件(mp3,wav)时间的两种方法
- Python图像处理丨基于OpenCV和像素处理的图像灰度化处理
- Python Django框架学习08:Django 视图
- [Python]通过websocket与jsclient通信
- python进程间的通信
- 【华为OD机试Python实现】HJ25 数据分类处理(较难)
- Python:使用nltk统计词频并绘制统计图
- Python 求两个 list 的交集、并集、差集、和集
- Python 多进程异常处理
- 基于Python语言使用RabbitMQ消息队列(四)
- Python-OpenCV图像处理-00-OpenCV环境的搭建及测试
- python基础中,列表的定义及相关应用
- python-opencv知识总结之图像操作:创建、遍历、运算与查找
- OpenCV-Python实战(8) —— OpenCV 实现批量将 bmp、png、jpg格式图片转换为 png 格式图片
- OpenCV-Python学习(1)—— OpenCV历史与安装
- Python基于OpenCV高空抛物检测系统[完整源码&部署教程]
- [透视变换]象棋棋盘矫正Python&OpenCV