OpenCV实现控件区域Bounding Box检测与绘制的问题
OpenCV实现控件区域Bounding Box检测与绘制的问题
我刚接触OpenCV和图像处理,现在想实现用OpenCV给界面里的每个滑块控件区域都画上 bounding box,目标是给每个滑块整体加上框线,初始的ER滑块控件界面是这样的:
(图:ER滑块控件界面,每个滑块包含文本标签和对应的滑动条组件)
但我尝试用阈值化和膨胀操作处理后,控件的框线消失了,只剩文本区域,导致findContours只能识别到文本的轮廓。我试过调大MORPH_RECT结构元素的尺寸来合并文本区域,但结果并不理想,膨胀后的效果是这样的:
(图:膨胀处理后的图像,仅文本区域被合并,控件原本的框线完全丢失)
我目前使用的代码如下:
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (7,7), 0) thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 10)) dilate = cv2.dilate(thresh, kernel, iterations=1) cnts = cv2.findContours(dilate, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = cnts[0] if len(cnts) == 2 else cnts[1] cnts = sorted(cnts, key=lambda x: cv2.boundingRect(x)[1]) for c in cnts: x, y, w, h = cv2.boundingRect(c) roi = image[y:y+h, x:x+w] cv2.rectangle(image, (x, y), (x+w, y+h), (36,255,12), 2)
我现在不确定该如何调整图像处理流程或者轮廓识别逻辑,才能达到理想的效果——给每个滑块控件整体绘制完整的 bounding box,就像我手动标注的这张示意图一样:
(图:手动标注的理想效果,每个滑块控件被独立的 bounding box 完整包裹)
备注:内容来源于stack exchange,提问作者Finatik
相关产品推荐
相关产品推荐

