ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

opencv--检测图片中的圆形

2021-08-05 02:32:49  阅读:209  来源: 互联网

标签:temp -- cv2 霍夫 opencv 圆形 np circle 半径


说明

Canny边缘检测+霍夫圆识别图片中的圆形,由于霍夫圆的半径过滤不太稳定,当图中有多个圆时还要自行斟酌,如果是多个半径不同的圆,可以多次使用霍夫圆,并取第一个来识别。但是如果图中有多个半径相似的圆时,有必要转换方法或者提取更多细节来拟合霍夫圆。使用的图片来自:http://www.ihalcon.com/read-1108.html

完整代码

import cv2.cv2 as cv2
import numpy as np
path='a.jpg'
img = cv2.imread(path,0)
gaussimg=cv2.GaussianBlur(img,(3,3),0) #高斯滤波,(3,3)为高斯半径
medianimg = cv2.medianBlur(gaussimg, 7) #中值滤波
cannyimg=cv2.Canny(medianimg,0,148) #canny边缘检测
temp = np.ones(cannyimg.shape,np.uint8)*255 #创建一个空的画布
contours= cv2.findContours(cannyimg,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
contour = contours[0] #提取轮廓
cv2.drawContours(temp,contour,-1,(0,0,0),3) #把轮廓画到画布上
cv2.imshow('image',temp)
cv2.waitKey(1000)
circle = cv2.HoughCircles(temp,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=10,minRadius=0,maxRadius=800) #按照画布上的轮廓生成霍夫圆
circle = np.uint16(np.around(circle))
img2bgr=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
count=1 #终止信号,只取第一个霍夫圆,试着用数组取了但是没成功
for i in circle[0]:#得到的霍夫圆是默认按照投票结果的累加值排序,一般取第一个就是与轮廓最拟合的那个
#如果有多个圆识别,可以试试用多次霍夫圆,试着用半径过滤到同一块的圆,再取最为拟合的第一个圆,不过这样不稳定
cv2.circle(img2bgr,(i[0],i[1]),i[2],(0,0,255),5) #在图像上画出这个霍夫圆
count+=1
if count==2:
break
cv2.imshow('image',img2bgr)
cv2.waitKey(1000)

 

标签:temp,--,cv2,霍夫,opencv,圆形,np,circle,半径
来源: https://www.cnblogs.com/xushenghai19841013/p/15101488.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有