像形状一样检测圆圈opencv

时间:2016-02-20 04:26:10

标签: python opencv computer-vision artificial-intelligence

每个人我对OpenCV和计算机视觉都很陌生,我坚持这个问题,这似乎是一个相当微不足道但原谅我的高通:)

我正试图从横截面图像中检测出Rebars。

Original Color Image

我正在使用此代码:

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

img = cv2.imread('test/t2.jpg',0)
img = cv2.equalizeHist(img)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

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

circles = np.uint16(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)

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

这是我目前得到的结果,这不是很好: Result

我正在寻找有关如何处理此问题的指示以及如何了解有关简历的更多信息,因为我真的很感兴趣!

非常感谢!

3 个答案:

答案 0 :(得分:8)

return Redirect::to('cuslist')->with('asdasdadsads', '$values'); 不是一种足够强大的方法来检测像你这样的复杂图像中的圆圈。

SO已经对此进行了一些讨论。你可以用质量接受的答案来引用这些帖子

标准方式:

Filled circle detection using CV2 in Python?

What are the possible fast ways to detect circle in an image?

噪点图片

https://dsp.stackexchange.com/questions/5930/find-circle-in-noisy-data

另一种方法:

Gradient Pair Vectors

Learning Automata

答案 1 :(得分:2)

通过在此行上更好地设置参数,可以略微改善这些结果:

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

例如,您可以稍微降低maxRadius并提高灵敏度。

但是,根据我的经验,你不会在这样的图像上获得好成绩。它非常复杂,圆形不规则,角度不同。如果您的目标是练习,那么请确保使用参数并尝试不同的方法来改进它。虽然我没有看到太多实际用途。

答案 2 :(得分:1)

您可以使用模块trackpy检测此处的功能。您需要使用奇数来改变特征尺寸,并查看哪一个最匹配。您可能还需要进行一些预处理,例如将图像转换为灰度。

import trackpy as tp
import numpy as np
import pandas as pd
import pims
import matplotlib.pyplot as plt

#%% importing the data
frames=pims.ImageSequence('F:/TrapHysteresis/processing/Positions/*.TIF')

#%% tracking circles and center positions
featuresize=71
f1=tp.locate(frames[0],featuresize)

plt.figure()
tp.annotate(f1,frames[0])