简体   繁体   English

使用python在open cv中进行圆圈检测

[英]circle detection in open cv using python

I was trying to detect circles from a black background with red circular kind objects. 我试图用红色圆形物体检测黑色背景中的圆圈。

import cv2
import cv2.cv as cv
import numpy as np

img = cv2.imread('extracted.jpg',0)
img = cv2.medianBlur(img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

circles = cv2.HoughCircles(img,cv.CV_HOUGH_GRADIENT,1,20,
                        param1=50,param2=30,minRadius=0,maxRadius=0)

circles = np.uint8(np.around(circles))
for i in circles[0,:]:
   # draw the outer circle
   cv2.circle(cimg,(i[0],i[1]),i[2],(0,255,0),2)
   # draw the center of the circle
   cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),3)

cv2.imshow('detected circles',cimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

I have loaded the image in grayscale mode,still it gives me an error 我已经以灰度模式加载了图像,但它仍然给我一个错误

"circles = np.uint8(np.around(circles))
File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 2277, in around
  return _wrapit(a, 'round', decimals, out)
File "/usr/lib/python2.7/dist-packages/numpy/core/fromnumeric.py", line 37, in _wrapit
  result = getattr(asarray(obj),method)(*args, **kwds)
AttributeError: rint"

I cannot post the image because of my present reputation. 由于我目前的声誉,我无法发布图片。

There is a small correction to be made in your code. 您的代码中有一个小的更正。

You are loading image in grayscale, and then again converting it to grayscale using cv2.cvtColor which is invalid operation. 您正在以灰度加载图像,然后再使用cv2.cvtColor将其转换为灰度,这是无效操作。

Alternatively, OpenCV provides a sample for circle detection using Hough Circles method . 或者,OpenCV 使用Hough Circles方法提供用于圆检测样本 You can try that. 你可以试试。

If you are using OpenCV 2.x version, just change the cv2.LINE_AA to cv2.CV_AA or any other lineType you prefer. 如果您使用的是OpenCV 2.x版本,只需将cv2.LINE_AA更改为cv2.CV_AA或您喜欢的任何其他线型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM