说明
根据官方文档学习使用cv2.cvtColor()、cv2.inRange()和cv2.bitwise_and()方法。通过使用cv2.cvtColor()将图片转换为hsv颜色空间形式的图片,再通过cv2.inRange()得到mask画面,再用cv2.bitwise_and()方法将原图与mask图片融合,最终得到需要找到特定颜色的区域。代码如下
import cv2
import numpy as np
import matplotlib.pyplot as plt
#read image
img = cv2.imread('Pic.jpg')
#convert BGR to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#defined the range of a color
lower_color = np.array([17,100,100])
upper_color = np.array([23,230,255])
#get mask
mask = cv2.inRange(hsv, lower_color, upper_color)
#get result
res = cv2.bitwise_and(img, img, mask= mask)
#Because cv2's color system is BGR, but matplotlib's color system is RGB,
#must convert BGR to RGB
imgrgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
resrgb = cv2.cvtColor(res, cv2.COLOR_BGR2RGB)
img_data = [imgrgb, hsv, mask, resrgb]
titles = ['Original image', 'HSV image', 'Mask image', 'Result image']
for i in range(4):
plt.subplot(2,2,i+1)
plt.imshow(img_data[i])
plt.title(titles[i])
plt.xticks([])
plt.yticks([])
plt.show()
结果如下图:
找特定颜色的HSV值可通过如下方法:
color_value = np.uint([[[30,182,253]]])
color_hsv_value = cv2.cvtColor(color_value, cv2.COLOR_BGR2HSV)
print(color_hsv_value)
通过上述三行命令可以得出来想要找出颜色的hsv值,然后在根据想要的效果确定范围值即可。
写这些东西是发现自己在学习的时候容易忘记,所以想通过写下来能够增加熟练度。