1、颜色空间有很多种,基础知识下次有空我补上
主要的颜色空间有RGB,HSV,HSI,LAB,YUV,YCrCb
典型的颜色空间转换代码如下
#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
#颜色空间测试
def color_space_test(img):
#转换为gray
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.namedWindow("gray",cv.WINDOW_NORMAL)
cv.imshow("gray",gray)
#转换为hsv
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
cv.namedWindow("hsv",cv.WINDOW_NORMAL)
cv.imshow("hsv",hsv)
#转换为yuv
yuv = cv.cvtColor(img,cv.COLOR_BGR2YUV)
cv.namedWindow("yuv",cv.WINDOW_NORMAL)
cv.imshow("yuv",yuv)
#转换为ycrcb
ycrcb = cv.cvtColor(img,cv.COLOR_BGR2YCrCb)
cv.namedWindow("ycrcb",cv.WINDOW_NORMAL)
cv.imshow("ycrcb",ycrcb)
def img_test():
img = cv.imread('E:/chenopencvblogimg/lena.jpg')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
color_space_test(img)
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)
2、色彩空间
2.1彩色空间
(1)HSV色彩空间
(2)HSI色彩空间
(3)LAB色彩空间
2.2代码
下面这个表只是参照,具体要根据需要自己调整!!!
检测魔方
#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
#颜色空间测试
def color_space_detect(img):
#转换为hsv
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
#黄色检测
yellow_lower_hsv = np.array([26,43,46])
yellow_uper_hsv = np.array([34,255,255])
yellowmask = cv.inRange(hsv,lowerb=yellow_lower_hsv,upperb=yellow_uper_hsv)
cv.namedWindow("yellow detected",cv.WINDOW_NORMAL)
cv.imshow("yellow detected",yellowmask)
#蓝色检测
blue_lower_hsv = np.array([100,43,46])
blue_uper_hsv = np.array([124,255,255])
bluewmask = cv.inRange(hsv,lowerb=blue_lower_hsv,upperb=blue_uper_hsv)
cv.namedWindow("blue detected",cv.WINDOW_NORMAL)
cv.imshow("blue detected",bluewmask)
#颜色空间测试
def color_space_test(img):
#转换为gray
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.namedWindow("gray",cv.WINDOW_NORMAL)
cv.imshow("gray",gray)
#转换为hsv
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
cv.namedWindow("hsv",cv.WINDOW_NORMAL)
cv.imshow("hsv",hsv)
#转换为yuv
yuv = cv.cvtColor(img,cv.COLOR_BGR2YUV)
cv.namedWindow("yuv",cv.WINDOW_NORMAL)
cv.imshow("yuv",yuv)
#转换为ycrcb
ycrcb = cv.cvtColor(img,cv.COLOR_BGR2YCrCb)
cv.namedWindow("ycrcb",cv.WINDOW_NORMAL)
cv.imshow("ycrcb",ycrcb)
def img_test():
img = cv.imread('E:/chenopencvblogimg/mofan.jpg')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
#检测颜色
color_space_detect(img)
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)
3、色彩分离 和合并
用HSV为例子,代码如下
#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
def img_test():
img = cv.imread('E:/chenopencvblogimg/mofan.jpg')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
#转换为hsv
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
#分离通道
h,s,v = cv.split(hsv)
cv.namedWindow("h",cv.WINDOW_NORMAL)
cv.imshow("h",h)
cv.namedWindow("s",cv.WINDOW_NORMAL)
cv.imshow("s",s)
cv.namedWindow("v",cv.WINDOW_NORMAL)
cv.imshow("v",v)
#可以对每个通道检测和处理
#如下是对h通道处理
h[:]=255
cv.namedWindow("hprocessed",cv.WINDOW_NORMAL)
cv.imshow("hprocessed",h)
#合并通道
tpimg = cv.merge([h,s,v])
cv.namedWindow("mergeimg",cv.WINDOW_NORMAL)
cv.imshow("mergeimg",tpimg)
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)