Python 检测opencv中的圆形形状

Python 检测opencv中的圆形形状,python,opencv,computer-vision,artificial-intelligence,Python,Opencv,Computer Vision,Artificial Intelligence,每个人,我对OpenCV和计算机视觉都是相当陌生的,我被这个问题困住了,这个问题看起来可能很琐碎,但请原谅我的无知:) 我试图从横截面图像中检测钢筋 我正在使用以下代码: 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) circl

每个人,我对OpenCV和计算机视觉都是相当陌生的,我被这个问题困住了,这个问题看起来可能很琐碎,但请原谅我的无知:)

我试图从横截面图像中检测钢筋

我正在使用以下代码:

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()
这是我目前得到的结果,不太好:

我正在寻找如何继续这个问题的指针,以及如何学习更多关于简历,因为我真的很感兴趣


非常感谢

HoughCircles
不足以在像您这样的复杂图像中检测圆

所以我们已经对此进行了一些讨论。你可以用高质量的答案来引用这些帖子

标准方式:

噪声图像:

另一种方法:


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

circles = cv2.HoughCircles(img,cv.CV_HOUGH_GRADIENT,1,10,param1=50,param2=30,minRadius=0,maxRadius=25)
例如,可以稍微减小maxRadius并增加灵敏度


然而,以我的经验,在这样的图像上你不会得到好的结果。它非常复杂,圆圈不规则且角度不同。如果你的目标是练习,那么一定要使用这些参数,并尝试不同的方法来提高它。不过,我看不出有什么实际用途

您可以使用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])

你有什么问题?哦,对不起,我忘了提到主要部分,我无法正确地检测到这些,这就是我得到的结果