嵌套圆形验证码识别:获取内部圆形坐标的技术方案咨询
验证码内嵌套圆形坐标提取方案咨询
问题背景
- 核心目标:提取验证码中被其他圆形包含的内部圆形的至少一组(x,y)坐标
- 涉及验证码:共4张示例验证码
已尝试的传统图像处理方案
形态学操作去除干扰线条
尝试通过形态学开运算检测并移除各类长曲线干扰,代码如下:
import cv2 import numpy as np import math import cv2 as cv # 读取图像并反转颜色 image = cv2.bitwise_not(cv2.imread("first-example.png")) # 创建卷积核 # 最初尝试的水平检测核 # kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1,3)) # 优化后的水平检测核(减少圆形像素丢失) kernel = np.array([[0, 0, 0, 0, 0], [1, 1, 1, 1, 1], [0, 0, 0, 0, 0], ], dtype=np.uint8) # 检测水平线 opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel, iterations=1) # 垂直检测核 # kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3,1)) kernel2 = np.array([[0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0], [0, 1, 0]], dtype=np.uint8) # 检测垂直线 opening2 = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel2, iterations=1) # 左上-右下对角线检测核 kernel3 = np.eye(4, dtype=np.uint8) opening3 = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel3, iterations=1) # 右上-左下对角线检测核 kernel4 = np.fliplr(np.eye(4, dtype=np.uint8)) opening4 = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel4, iterations=1) # 从原图中剔除检测到的干扰线条 result1 = cv2.subtract(image, opening) result2 = cv2.subtract(result1, opening2) result3 = cv2.subtract(result2, opening3) result4 = cv2.subtract(result3, opening4) cv2.imshow('opening1', opening) cv2.imshow('opening2', opening2) cv2.imshow('result', result1) #cv2.imshow('result', result) cv2.imshow('result2', result2) cv2.imshow('endresult', result4)
处理后得到了干扰线条的检测结果,与原图相减后的最终输出仍无法满足提取嵌套圆形坐标的需求。
其他尝试
- 使用
findContours识别干扰线条,未成功 - 调整参数后使用
cv2.HoughCircles检测圆形,结果仍未达成目标
咨询问题
仅依靠传统图像处理手段能否解决该问题?还是更适合采用神经网络方案?(性能不是限制因素)
内容的提问来源于stack exchange,提问作者Lesly
相关产品推荐
相关产品推荐

