下面给您讲解一下“Python OpenCV基于HSV的颜色分割实现示例”的完整攻略。
简介
HSV是颜色空间的一种,由色调(Hue)、饱和度(Saturation)和明度(Value)构成。相对与RGB颜色空间,HSV颜色空间更加容易进行颜色分割。本实例使用Python OpenCV实现基于HSV颜色空间的颜色分割。
准备
安装Python和OpenCV、numpy库,可以使用pip install opencv-python numpy命令进行安装。
开始实现
1.读取图像
首先,读入一张图片。
import cv2
img = cv2.imread("example.jpg")
2.转换颜色空间
将BGR颜色空间转换为HSV颜色空间。
import cv2
import numpy as np
img = cv2.imread("example.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
3.确定颜色分割的范围
选定要分割的颜色的范围。这里以分割红色为例,红色的HSV值为0-10和160-179。
import cv2
import numpy as np
img = cv2.imread("example.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 分割红色
lower_red1 = np.array([0, 70, 50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 70, 50])
upper_red2 = np.array([179, 255, 255])
mask_red1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask_red2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask_red = cv2.bitwise_or(mask_red1, mask_red2)
4.应用颜色分割
使用颜色分割后的掩膜对原图像进行处理,即可得到分割后的图像。
import cv2
import numpy as np
img = cv2.imread("example.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 分割红色
lower_red1 = np.array([0, 70, 50])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([160, 70, 50])
upper_red2 = np.array([179, 255, 255])
mask_red1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask_red2 = cv2.inRange(hsv, lower_red2, upper_red2)
mask_red = cv2.bitwise_or(mask_red1, mask_red2)
# 应用颜色分割
res = cv2.bitwise_and(img, img, mask=mask_red)
cv2.imshow("result", res)
cv2.waitKey(0)
cv2.destroyAllWindows()
示例说明
示例1:分割绿色
如果要分割绿色,在确定颜色分割的范围时,可以设置如下的上下界。
# 分割绿色
lower_green = np.array([35, 43, 46])
upper_green = np.array([90, 255, 255])
mask_green = cv2.inRange(hsv, lower_green, upper_green)
示例2:分割蓝色
如果要分割蓝色,在确定颜色分割的范围时,可以设置如下的上下界。
# 分割蓝色
lower_blue = np.array([100, 50, 50])
upper_blue = np.array([124, 255, 255])
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python OpenCV基于HSV的颜色分割实现示例 - Python技术站