You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套圆形验证码识别:获取内部圆形坐标的技术方案咨询

验证码内嵌套圆形坐标提取方案咨询

问题背景

  • 核心目标:提取验证码中被其他圆形包含的内部圆形的至少一组(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:01:00