OpenCV__Python颜色空间RGB和HSV_教程7

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)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值