色彩空间
© Fu Xianjun. All Rights Reserved.
一、图像类型转换
1、将图像在BGR模式与RGB模式之间转换
代码如下
import cv2
import numpy as np
img1=cv2.imread("dog.png")
rgb = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)#图像类型转换函数
cv2.imshow("BGR",img1)
cv2.imshow("RGB",rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果如下
2、将图像在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}")
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图像颜色通道分离
结果如下
三、提取指定颜色
1、提取图像中的红色区域
代码如下
import cv2
import numpy as np
img2=cv2.imread("yy.png")
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()
结果如下
2、提取图像中的绿色区域
import cv2
import numpy as np
img=cv2.imread("yy.png")
cv2.imshow("SRC",img)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)#图像类型转换函数
cv2.imshow("HSV",hsv)
lowerb_hsv = np.array([37,43,46])#要识别颜色的下限
upperb_hsv = np.array([77,255,255])#要识别的颜色的上限,青色也是
mask = cv2.inRange(hsv, lowerb_hsv, upperb_hsv)
green = cv2.bitwise_and(img,img,mask=mask)
cv2.imshow("GREEN",green)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像怀旧特效
代码如下
#coding:utf-8
import cv2 as cv
import numpy as np
#读取原始图像
img = cv.imread('dog.png')
#获取图像行和列
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.waitKey()
cv.destroyAllWindows()
结果如图