OpenCV|OpenCV图像处理和应用—色彩空间与几何变换(一)

前言
RGB是一种比较常见的色彩空间类型,除此之外还有一些其他的色彩空间,比如常见的包括GRAY色彩空间(灰度图像)、XYZ色彩空间、YCrCb色彩空间、HSV色彩空间、HLS色彩空间、CIELab色彩空间、CIELuv色彩空间、Bayer色彩空间等。每个色彩空间都有自己擅长的领域,因此,为了更方面的处理某个具体问题需要用到色彩空间的类型转换。
色彩空间类型转换是指,将一个色彩空间转换为另一个色彩空间。例如,在进行图像的特征提取、距离计算时,往往先将图像从RGB色彩空间转换灰度色彩空间。一些应用中,可能将色彩空间的图像转换为二值图像。详情
? Fu Xianjun. All Rights Reserved. 正文 图像类型转换

**将图像在BGR模式与RGB模式之间转换** import cv2 import numpy as np img1=cv2.imread("pig.jpg") rgb = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)#图像类型转换函数 cv2.imshow("BGR",img1) cv2.imshow("RGB",rgb) cv2.waitKey(0) cv2.destroyAllWindows()**将图像在BGR模式与GRAY模式之间转换** gray = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY) cv2.imshow("GRAY",gray) cv2.waitKey(0) cv2.destroyAllWindows()

重点:颜色通道分离
print(f"BGR图像的shape为{bgr.shape}") print(f"GRAY图像的shape为{gray.shape}") #结果:[BGR图像的shape为(500, 500, 3) #GRAY图像的shape为(500, 500)] def Colorsplit(img): (B,G,R) = cv2.split(img)#将BGR图像的颜色通道分离 cv2.imshow("blue",B) cv2.imshow("green",G) cv2.imshow("red",R) cv2.waitKey(0) cv2.destroyAllWindows() Colorsplit(bgr)#将转换前的RGB图像颜色通道分离 bgr2 = cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR) cv2.imshow("after",bgr2) cv2.waitKey(0) cv2.destroyAllWindows() Colorsplit(bgr2)#将转换后的RGB图像颜色通道分离结论:GRAY转换为BRG颜色空间,各通道值相同

提取指定颜色 提取图像中的红色区域
OpenCV|OpenCV图像处理和应用—色彩空间与几何变换(一)
文章图片

import cv2 import numpy as npimg2=cv2.imread("pig.jpg") cv2.imshow("SRC",img2) hsv = cv2.cvtColor(img2, cv2.COLOR_BGR2HSV)#图像类型转换函数 cv2.imshow("HSV",hsv)lowerb_hsv = np.array([156,43,46])#要识别颜色的下限 upperb_hsv = np.array([180,255,255])#要识别的颜色的上限mask = cv2.inRange(hsv, lowerb_hsv, upperb_hsv) cv2.imshow("MASK",mask) cv2.waitKey(0) cv2.destroyAllWindows()red = cv2.bitwise_and(img2,img2,mask=mask) cv2.imshow("RED",red) cv2.waitKey(0) cv2.destroyAllWindows()

提取图像中的绿色和蓝色区域,和提取图像中的红色区域差不多,这里不做展开,运用好这些就可以自己做滤镜特效
突如其来的案例:图像怀旧特效
OpenCV|OpenCV图像处理和应用—色彩空间与几何变换(一)
文章图片

#coding:utf-8 import cv2 as cv import numpy as np#读取原始图像 img = cv.imread('pig.jpg')#获取图像行和列 rows, cols = img.shape[:2]#新建目标图像 dst = np.zeros((rows, cols, 3), dtype="uint8")#图像怀旧特效 for i in range(rows): for j in range(cols): B = 0.272*img[i,j][2] + 0.534*img[i,j][1] + 0.131*img[i,j][0] G = 0.349*img[i,j][2] + 0.686*img[i,j][1] + 0.168*img[i,j][0] R = 0.393*img[i,j][2] + 0.769*img[i,j][1] + 0.189*img[i,j][0] if B>255: B = 255 if G>255: G = 255 if R>255: R = 255 dst[i,j] = np.uint8((B, G, R))#显示图像 #cv.imshow('result',np.vstack((img,dst))) cv.imshow('img',img) cv.imshow('result',dst) cv.waitKey() cv.destroyAllWindows()

【OpenCV|OpenCV图像处理和应用—色彩空间与几何变换(一)】效果图
OpenCV|OpenCV图像处理和应用—色彩空间与几何变换(一)
文章图片

    推荐阅读