网站开发基础教程,平面设计网上培训,杭州在线制作网站,网站建设 万网 域名HSV颜色空间 与RGB颜色空间相比#xff0c;HSV颜色空间更适合进行颜色分析和提取特定颜色的目标。在HSV空间中#xff0c;颜色信息被分布在不同的通道上#xff0c;使我们能够更准确地定义颜色的范围#xff0c;并使用阈值操作轻松地分离出我们感兴趣的区域部分。 HSV三个通…HSV颜色空间 与RGB颜色空间相比HSV颜色空间更适合进行颜色分析和提取特定颜色的目标。在HSV空间中颜色信息被分布在不同的通道上使我们能够更准确地定义颜色的范围并使用阈值操作轻松地分离出我们感兴趣的区域部分。 HSV三个通道的含义 色相Hue表示颜色的类型或种类而不受光照变化的影响。 饱和度Saturation表示颜色的纯度或鲜艳程度。 明度Value表示颜色的亮度。 在提取期望颜色区域时参考博客给出的HSV颜色识别-HSV基本颜色分量范围-CSDN博客
滑动条交互界面的代码实现
# 通过滑动条动态观察不同的HSV的阈值下图像可显示区域的变化过程import cv2
import numpy as npdef on_trackbar_min_hue(value):global min_huemin_hue valuedef on_trackbar_max_hue(value):global max_huemax_hue valuedef on_trackbar_min_saturation(value):global min_saturationmin_saturation valuedef on_trackbar_max_saturation(value):global max_saturationmax_saturation valuedef on_trackbar_min_value(value):global min_valuemin_value valuedef on_trackbar_max_value(value):global max_valuemax_value value# 创建一个空窗口
cv2.namedWindow(Color Range Visualization)# 创建滑动条并初始化HSV最小和最大值
min_hue, max_hue 100, 130
min_saturation, max_saturation 40, 255
min_value, max_value 80, 255# 创建滑动条
cv2.createTrackbar(Min Hue, Color Range Visualization, min_hue, 179, on_trackbar_min_hue)
cv2.createTrackbar(Max Hue, Color Range Visualization, max_hue, 179, on_trackbar_max_hue)
cv2.createTrackbar(Min Saturation, Color Range Visualization, min_saturation, 255, on_trackbar_min_saturation)
cv2.createTrackbar(Max Saturation, Color Range Visualization, max_saturation, 255, on_trackbar_max_saturation)
cv2.createTrackbar(Min Value, Color Range Visualization, min_value, 255, on_trackbar_min_value)
cv2.createTrackbar(Max Value, Color Range Visualization, max_value, 255, on_trackbar_max_value)# 读取示例图像
image cv2.imread(YOUR IMAGE PATH)
image cv2.resize(image,(700,700)) # 图片过小的话窗口容不下这些控件
print(image.shape)while True:# 转换图像到HSV颜色空间hsv_image cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 创建一个包含最小和最大HSV值的NumPy数组lower_range np.array([min_hue, min_saturation, min_value])upper_range np.array([max_hue, max_saturation, max_value])# 根据HSV范围创建掩码mask cv2.inRange(hsv_image, lower_range, upper_range)# 将掩码应用于原始图像result cv2.bitwise_and(image, image, maskmask)# 在显示窗口上实时显示滑动条的数值text1 fMin Hue: {min_hue} Max Hue: {max_hue}cv2.putText(result, text1, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)text2 fMin Saturation: {min_saturation} Max Saturation: {max_saturation} cv2.putText(result, text2, (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)text3 fMin Value: {min_value} Max Value: {max_value}cv2.putText(result, text3, (10, 110), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)# 显示结果图像cv2.imshow(Original Image, image)cv2.imshow(Color Range Visualization, result)# 按下Esc键退出if cv2.waitKey(1) 27:break# 释放窗口和销毁所有创建的窗口
cv2.destroyAllWindows()
运行结果示例 通过拉动上方的滑动条不在滑动条对应的HSV范围内区域将被[0,0,0]的mask淹没即可以实时可视化选定HSV范围内的区域。 如下图所示三张图片依次为滑动条窗口选定HSV范围内的区域可视化输入的原图像