2021-07-22

opencv-python改变颜色空间

cv.cvtColor()函数用于颜色空间转换。他的参数有两个,第一个是需要改变颜色空间的图片对象,第二个是需要转换成的类型。然后返回改变后的图片。

img1 = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)

转换类型:

转换类型opencv2.xopencv3.x
RGB<–>BGRCV_BGR2BGRA 、CV_RGB2BGRA 、CV_BGRA2RGBA 、CV_BGR2BGRA、CV BGRA2BGRCOLOR_BGR2BGRA、COLOR_RGB2BGRA、COLOR_BGRA2RGBA、COLOR_BGR2BGRA、COLOR_BGRA2BGR
RGB<–>GRAYCV_RGB2GRAY、CV_GRAY2RGB、CV_RGBA2GRAY、CV_GRAY2GRBACOLOR_RGB2GRAY、COLOR_GRAY2RGB 、COLOR_RGBA2GRAY、COLOR_GRAY2GRBA
RGB<–>HSVCV_BGR2HSV、CV_RGB2HSV、CV_HSV2BGR、CV_HSV2RGBCOLOR_BGR2HSV、COLOR_RGB2HSV、COLOR_HSV2BGR、COLOR_HSV2RGB
RGB<–>YCrCb、JPEG(或YCC)CV_RGB2YCrCb 、CV_RGB2YCrCb、CV_YCrCb2BGR 、CV YCrCb2RGB、(可以用 YUV代替 YCrCb)COLOR_RGB2YCrCb、COLOR_RGB2YCrCb、COLOR_YCrCb2BGR、COLOR_ YCrCb2RGB (可以用 YUV代替YCrCb)
RGB<–>CIE XYZCV_BGR2XYZ、CV_RGB2XYZ,、CV_XYZ2BGR,、CV_XYZ2RGBXOLOR_BGR2XYZ、COLOR_RGB2XYZ、COLOR_XYZ2BGR、 COLOR_XYZ2RGB
RGB<–>HLSCV_BGR2HLS、CV_RGB2HLS、 CV_HLS2BGR、CV_HLS2RGBCOLOR_BGR2HLS、COLOR_RGB2HLS、COLOR_HLS2BGR、 COLOR_HLS2RGB
RGB<–>CIE L*a*bCV_BGR2Lab、CV_RGB2Lab、CV_Lab2BGR、CV_Lab2RGCOLOR_BGR2Lab、COLOR_RGB2Lab、COLOR_Lab2BGR,、COLOR_ Lab2RGB
RGB<–>CIE L*a*bCV_BGR2Luv、CV_RGB2Luv,、CV_LUV2BGR, CV Luv2RGBCOLOR BGR2Luv、COLOR_RGB2Luv、COLOR_Luv2BGR、COLOR Luv2RGB

cv.inrange()函数,可实现二值化功能(这点类似threshold()函数),更关键的是可以同时针对多通道进行操作。他有四个参数,第一个是用来处理的图片,第二个是阈值下限,第三是阈值上限,第四个是处理后的图片。返回值是处理后的图片。
具体效果和threshold相似如果像素不在规定的阈值范围内,就是置为0.

 lower_blue = np.array([110,50,50])
 upper_blue = np.array([130,255,255])
 mask = cv.inRange(hsv, lower_blue, upper_blue)

追踪想要的HSV值

可以使用相同的函数cv.cvtColor()。你只需传递你想要的BGR值,而不是传递图像。例如,要查找绿色的HSV值:

>>> green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
>>> print( hsv_green )
[[[ 60 255 255]]]

提取单个对象代码例子

import cv2 as cv
import numpy as np
cap = cv.VideoCapture("C:\\Users\\Administrator\\Desktop\\pic\\na.mp4")
while(1):
 # 读取帧
 _, frame = cap.read()
 # 转换颜色空间 BGR 到 HSV
 hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
 # 定义HSV中蓝色的范围
 lower_blue = np.array([110,50,50])
 upper_blue = np.array([130,255,255])
 # 设置HSV的阈值使得只取蓝色
 mask = cv.inRange(hsv, lower_blue, upper_blue)
 mask_inv =cv.bitwise_not(mask)
 # 将掩膜和图像逐像素相加
 res = cv.bitwise_and(frame,frame, mask= mask)
 cv.namedWindow('frame',cv.WINDOW_NORMAL)
 cv.namedWindow('mask',cv.WINDOW_NORMAL)
 cv.namedWindow('res',cv.WINDOW_NORMAL)
 cv.imshow('frame',frame)
 cv.imshow('mask',mask)
 cv.imshow('res',res)
 k = cv.waitKey(5) & 0xFF
 if k == 27:
    break
cv.destroyAllWindows()

提取多个彩色对象

import cv2 as cv
import numpy as np
cap = cv.VideoCapture("C:\\Users\\Administrator\\Desktop\\pic\\na.mp4")
while(1):
 # 读取帧
 _, frame = cap.read()
 # 转换颜色空间 BGR 到 HSV
 hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
 # 定义HSV中蓝色的范围
 lower_blue = np.array([110,50,50])
 upper_blue = np.array([130,255,255])

 lower_green=np.array([50,110,50])
 upper_green=np.array([255,130,255])

 lower_red=np.array([50,50,110])
 upper_red=np.array([255,255,130])
 # 设置HSV的阈值使得只取蓝色
 maskb = cv.inRange(hsv, lower_blue, upper_blue)
 maskb_inv =cv.bitwise_not(maskb)
 maskg=cv.inRange(hsv, lower_green, upper_green)
 maskg_inv=cv.bitwise_not(maskg)
 maskr=cv.inRange(hsv, lower_red, upper_red)
 maskr_inv=cv.bitwise_not(maskr)
 mask=cv.add(maskb,maskg,0)
 mask=cv.add(mask,maskr,0)
 mask_inv=cv.add(maskb_inv,maskr_inv,0)
 mask_inv = cv.add(mask_inv, maskg_inv, 0)

 # 将掩膜和图像逐像素相加
 res = cv.bitwise_and(frame,frame, mask= mask)
 cv.namedWindow('frame',cv.WINDOW_NORMAL)
 cv.namedWindow('mask',cv.WINDOW_NORMAL)
 cv.namedWindow('res',cv.WINDOW_NORMAL)
 cv.imshow('frame',frame)
 cv.imshow('mask',mask)
 cv.imshow('res',res)
 k = cv.waitKey(5) & 0xFF
 if k == 27:
    break
cv.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值