本文主要介绍opencv-python中的颜色空间。
下面是示例代码:
# 导入需要用到的模块
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import cv2, glob
import numpy as np
# 指定要绘制的直方图的颜色
color = 'pieces/yellow'
# 指定通过全尺寸还是缩放进行显示
zoom = 1
# 加载文件夹下所有的图片
files = glob.glob(color + '*.jpg')
files.sort()
# 用于分隔绘图通道的空数组
B = np.array([])
G = np.array([])
R = np.array([])
H = np.array([])
S = np.array([])
V = np.array([])
Y = np.array([])
Cr = np.array([])
Cb = np.array([])
LL = np.array([])
LA = np.array([])
LB = np.array([])
# 创建数据
# 将每个文件的值附加到相应的通道
for fi in files[:]:
# BGR
im = cv2.imread(fi)
b = im[:, :, 0]
b = b.reshape(b.shape[0] * b.shape[1])
g = im[:,:,1]
g = g.reshape(g.shape[0]*g.shape[1])
r = im[:,:,2]
r = r.reshape(r.shape[0]*r.shape[1])
B = np.append(B, b)
G = np.append(G, g)
R = np.append(R, r)
# HSV
hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
h = hsv[:, :, 0]
h = h.reshape(h.shape[0]*h.shape[1])
s = hsv[:,:,1]
s = s.reshape(s.shape[0]*s.shape[1])
v = hsv[:,:,2]
v = v.reshape(v.shape[0]*v.shape[1])
H = np.append(H,h)
S = np.append(S,s)
V = np.append(V,v)
# YCrCb
ycb = cv2.cvtColor(im,cv2.COLOR_BGR2YCrCb)
y = ycb[:,:,0]
y = y.reshape(y.shape[0]*y.shape[1])
cr = ycb[:,:,1]
cr = cr.reshape(cr.shape[0]*cr.shape[1])
cb = ycb[:,:,2]
cb = cb.reshape(cb.shape[0]*cb.shape[1])
Y = np.append(Y,y)
Cr = np.append(Cr,cr)
Cb = np.append(Cb,cb)
# Lab
lab = cv2.cvtColor(im,cv2.COLOR_BGR2LAB)
ll = lab[:,:,0]
ll = ll.reshape(ll.shape[0]*ll.shape[1])
la = lab[:,:,1]
la = la.reshape(la.shape[0]*la.shape[1])
lb = lab[:,:,2]
lb = lb.reshape(lb.shape[0]*lb.shape[1])
LL = np.append(LL,ll)
LA = np.append(LA,la)
LB = np.append(LB,lb)
# 显示直方图
nbins = 10
plt.figure(figsize=[20,10])
plt.subplot(2, 3, 1)
plt.hist2d(B, G, bins=nbins, normed=LogNorm)
plt.xlabel('B')
plt.ylabel('G')
plt.title('RGB')
if not zoom:
plt.xlim([0,255])
plt.ylim([0,255])
plt.colorbar()
plt.subplot(2,3,2)
plt.hist2d(B, R, bins=nbins, normed=LogNorm())
plt.colorbar()
plt.xlabel('B')
plt.ylabel('R')
plt.title('RGB')
if not zoom:
plt.xlim([0,255])
plt.ylim([0,255])
plt.subplot(2,3,3)
plt.hist2d(R, G, bins=nbins, normed=LogNorm())
plt.colorbar()
plt.xlabel('R')
plt.ylabel('G')
plt.title('RGB')
if not zoom:
plt.xlim([0,255])
plt.ylim([0,255])
plt.subplot(2,3,4)
plt.hist2d(H, S, bins=nbins, normed=LogNorm())
plt.colorbar()
plt.xlabel('H')
plt.ylabel('S')
plt.title('HSV')
if not zoom:
plt.xlim([0,180])
plt.ylim([0,255])
plt.subplot(2,3,5)
plt.hist2d(Cr, Cb, bins=nbins, normed=LogNorm())
plt.colorbar()
plt.xlabel('Cr')
plt.ylabel('Cb')
plt.title('YCrCb')
if not zoom:
plt.xlim([0,255])
plt.ylim([0,255])
plt.subplot(2,3,6)
plt.hist2d(LA, LB, bins=nbins, normed=LogNorm())
plt.colorbar()
plt.xlabel('A')
plt.ylabel('B')
plt.title('LAB')
if not zoom:
plt.xlim([0,255])
plt.ylim([0,255])
plt.savefig(color + '.png',bbox_inches='tight')
else:
plt.savefig(color + '-zoom.png',bbox_inches='tight')
plt.show()
运行结果: