Python图像高亮文本提取:颜色阈值设置及自动检测问询
图像高亮文本提取的HSV阈值设置与自动检测方案
1. 目标颜色HSV上下阈值设置方法
HSV颜色空间中,H(色调)范围为0-179,S(饱和度)和V(亮度)范围为0-255。设置阈值可按以下步骤操作:
- 用取色工具(如系统自带取色器、Photoshop)获取目标颜色的RGB值;
- 将RGB值转换为OpenCV格式的HSV值(注意OpenCV默认读取图像为BGR顺序,转换时需先基于BGR转HSV);
- 根据目标颜色的实际波动(比如高亮的深浅、阴影),给H值加减5-15,S和V设置合理范围(高亮颜色的S通常不低于50,V不低于80)。
示例(以绿色高亮为例):
假设绿色RGB为(0,255,0),转HSV后为(60,255,255),可设置阈值:
lower_green = [50, 100, 100] upper_green = [70, 255, 255]
2. 黄色高亮的阈值处理
黄色的H值范围大致在15-35之间,由于黄色易与浅橙色、偏黄白色重叠,设置时需注意:
- 基础黄色RGB(255,255,0)转HSV为(30,255,255),可先设置初始阈值:
lower_yellow = [15, 100, 80] upper_yellow = [35, 255, 255]
- 若图像存在偏暗的黄色高亮,可降低S的下限(比如到50);若有偏亮的浅黄色,可降低V的下限(比如到60),根据实际mask效果微调。
3. 自动检测HSV阈值的交互式工具代码
可以用OpenCV滑动条实现实时调整阈值,直观查看mask效果,代码如下:
import cv2 import numpy as np def nothing(x): pass # 读取图像(替换为你的图像路径) img = cv2.imread("highlight_text.png") img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 创建窗口 cv2.namedWindow("HSV Threshold Adjuster") # 创建滑动条 cv2.createTrackbar("H Lower", "HSV Threshold Adjuster", 0, 179, nothing) cv2.createTrackbar("H Upper", "HSV Threshold Adjuster", 179, 179, nothing) cv2.createTrackbar("S Lower", "HSV Threshold Adjuster", 0, 255, nothing) cv2.createTrackbar("S Upper", "HSV Threshold Adjuster", 255, 255, nothing) cv2.createTrackbar("V Lower", "HSV Threshold Adjuster", 0, 255, nothing) cv2.createTrackbar("V Upper", "HSV Threshold Adjuster", 255, 255, nothing) while True: # 获取滑动条值 h_low = cv2.getTrackbarPos("H Lower", "HSV Threshold Adjuster") h_high = cv2.getTrackbarPos("H Upper", "HSV Threshold Adjuster") s_low = cv2.getTrackbarPos("S Lower", "HSV Threshold Adjuster") s_high = cv2.getTrackbarPos("S Upper", "HSV Threshold Adjuster") v_low = cv2.getTrackbarPos("V Lower", "HSV Threshold Adjuster") v_high = cv2.getTrackbarPos("V Upper", "HSV Threshold Adjuster") # 生成mask lower = np.array([h_low, s_low, v_low], np.uint8) upper = np.array([h_high, s_high, v_high], np.uint8) mask = cv2.inRange(img_hsv, lower, upper) # 显示结果 cv2.imshow("Original Image", img) cv2.imshow("Mask", mask) # 按ESC退出 if cv2.waitKey(1) & 0xFF == 27: break cv2.destroyAllWindows()
运行后拖动滑动条,直到mask完美覆盖高亮文本,此时滑动条的数值就是所需的HSV上下阈值。
基础颜色分割函数(你提供的代码)
import cv2 import numpy as np def mask_image(img_src, lower, upper): """Convert image from RGB to HSV and create a mask for given lower and upper boundaries.""" # RGB to HSV color space conversion(注意:OpenCV读取的图像是BGR格式,这里转换正确) img_hsv = cv2.cvtColor(img_src, cv2.COLOR_BGR2HSV) hsv_lower = np.array(lower, np.uint8) # Lower HSV value hsv_upper = np.array(upper, np.uint8) # Upper HSV value # Color segmentation with lower and upper threshold ranges to obtain a binary image img_mask = cv2.inRange(img_hsv, hsv_lower, hsv_upper) return img_mask, img_hsv
内容的提问来源于stack exchange,提问作者Rhombus
相关产品推荐
相关产品推荐

