基于opencvpython的不完全圆检测
有可能得到不完整圆的坐标吗?我正在使用opencv和python。所以我可以找到大部分的圆圈。 但是我不知道怎样才能发现照片中不完整的圆环。 我正在寻找一个简单的方法来解决它 导入系统 将cv2作为cv导入 将numpy作为np导入 ##[加载] 默认_文件='captcha2.png' #加载图像 src=cv.imread(cv.samples.findFile(默认文件),cv.imread\u颜色) ##[将颜色转换为灰色] #将其转换为灰色 灰色=cv.CVT颜色(src、cv.COLOR\u BGR2GRAY) ##[将颜色转换为灰色] ##[减少噪音] #减少噪声以避免假圆检测 灰色=等速中间模糊(灰色,3) ##[减少噪音] ##[霍格圈] #行=灰色。形状[0] 圆=cv.HOUGH圆(灰色,cv.HOUGH_渐变,1,5,, 参数1=1,参数2=35, 最小半径=1,最大半径=30) ##[霍格圈] ##[抽签] 如果圆不是无: 圆=np.uint16(np.around(圆)) 对于圆[0,:]中的i: 中心=(i[0],i[1]) #圆心 等速圆(src,中心,1,(0,100,100),3) #圆轮廓 半径=i[2] 等速圆(src,中心,半径,(255,0,255),3) ##[抽签] ##[显示] cv.imshow(“检测到的圆”,src) cv.waitKey(0) ##[显示] 嗨,还有一张照片。我想要不完整圆圈的x线和y线,左下角是浅蓝色 原图如下:基于opencvpython的不完全圆检测,python,opencv,geometry,detection,Python,Opencv,Geometry,Detection,有可能得到不完整圆的坐标吗?我正在使用opencv和python。所以我可以找到大部分的圆圈。 但是我不知道怎样才能发现照片中不完整的圆环。 我正在寻找一个简单的方法来解决它 导入系统 将cv2作为cv导入 将numpy作为np导入 ##[加载] 默认_文件='captcha2.png' #加载图像 src=cv.imread(cv.samples.findFile(默认文件),cv.imread\u颜色) ##[将颜色转换为灰色] #将其转换为灰色 灰色=cv.CVT颜色(src、cv.CO
您需要删除图像的彩色背景,只显示圆形 一种方法是:
- 获取输入图像的
- 应用于检测圆
二进制掩码: 使用二进制掩码,我们将检测圆: 代码:
#加载库
进口cv2
将numpy作为np导入
#加载图像
img=cv2.imread(“r5lcN.png”)
#复制输入图像
out=img.copy()
#转换为HSV颜色空间
hsv=cv2.CVT颜色(img,cv2.COLOR\U BGR2HSV)
#获取二进制掩码
msk=cv2.inRange(hsv,np.array([0,0130]),np.array([179,255,255]))
#检测图像中的圆
crc=cv2.HOUGH圆(msk,cv2.HOUGH_梯度,1,10,参数1=50,参数2=25,最小半径=0,最大半径=0)
#确保找到圆圈
如果crc不是无:
#将圆的坐标和半径转换为整数
crc=np.round(crc[0,:]).astype(“int”)
#对于每个(x,y)坐标和圆的半径
对于crc中的(x,y,r):
#画圆圈
圆(向外,(x,y),r,(0,255,0),4)
#打印坐标
打印(“x:{},y:{}”。格式(x,y))
#展示
cv2.imshow(“out”,np.hstack([img,out]))
cv2.等待键(0)
输出:
x:178, y:60
x:128, y:22
x:248, y:20
x:378, y:52
x:280, y:60
x:294, y:46
x:250, y:44
x:150, y:62
解释
我们有三个机会找到阈值:
- 简单阈值结果:
- 自适应阈值
- 二元掩模
crc=cv2.HOUGH圆(msk,cv2.HOUGH_梯度,1,10,param1=10,param2=15,minRadius=0,maxRadius=0)
替换主代码中的上述行将导致:
控制台结果
x:238, y:38
x:56, y:30
x:44, y:62
x:208, y:26
你也能附上电流输出吗?嘿,谢谢,这有助于我找到所有的圆圈。我在找你解释过的这样的东西。我喜欢二进制掩码的方式。但也可以在左下方找到开放圆?…找到开放圆。。。。你是说不完整的圆圈?我想是的,但不尝试就不确定哦,是的,我是说不完整的圆圈。这只是一个开放的圆圈。哪一个?我想我已经检测到了输入图像中的所有圆圈,我添加了另一张图片。还有一个不完整的圆圈。我在找x线和y线。