gpt4 book ai didi

python - 霍夫圆变换为圆形阴影

转载 作者:太空宇宙 更新时间:2023-11-03 20:52:56 29 4
gpt4 key购买 nike

我有一张图像,我在其中尝试将霍夫圆变换应用于 View 中的圆形对象。

我很难找到适合圆柱体外阴影的圆。可以做些什么来正确分割这个阴影并轻松地为它拟合一个圆圈?

代码:

img = cv2.medianBlur(im,7)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)

plt.imshow(cimg)
plt.show()

circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,20,
param1=50,param2=150,minRadius=100,maxRadius=0)

circles = np.uint16(np.around(circles))

for i in circles[0,:]:
# draw the outer circle
cv2.circle(cimg,(i[0],i[1]),i[2],(255,0,0),10)
# draw the center of the circle
cv2.circle(cimg,(i[0],i[1]),2,(0,0,255),20)

radius = i[2]
print 'radius', radius, 'px'

plt.imshow(cimg)
plt.show()

最佳答案

我只是写出代码,而不是仔细研究它,因为有很多函数,我不愿意假设你知道或不知道什么,并花很长时间来写。如果您有任何问题,请随时提出,我会在帖子中添加。

您要求在新月形阴影中加入一个圆圈,所以我在阴影中加入了圆圈。重要的是要认识到,在某种生产代码中,我想,必须处理大量这种性质的图像,因此有必要细化拟合的圆圈。特别是这种类型的任何类型的结构分析都只是担心给定的形状适合像素,而不是所讨论的对象就是你要找的东西。

我故意将错误安装的圆圈留在那里。我建议使用 convexHull、Haar 检测器或形状匹配,具体取决于您感兴趣的内容。

import cv2 
import numpy as np

img = cv2.imread("orig.png", cv2.IMREAD_GRAYSCALE)

ret, thresh = cv2.threshold(img, 80, 255, cv2.THRESH_BINARY_INV)

ero = cv2.erode(thresh, np.ones((5,5)))
dil = cv2.dilate(ero, np.ones((5,5)))

img, contours, hierarchy = cv2.findContours(dil, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_NONE)

#just for drawing purposes, the cimg is not really required
cimg = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
for cnt in contours:
(x, y), radius = cv2.minEnclosingCircle(cnt)
center = (int(x), int(y))
radius = int(radius)
cv2.circle(cimg, center, radius, (255, 0, 0), 1)

我得到的输出图像是

enter image description here

两个月牙都正确安装,底部的月牙与水箱外部匹配,而不是月牙完全匹配。不过,您可以进行某种滞后跟踪并移动该圆圈,直到它的外缘相当一致地恰好位于新月形。

如果您恰好调整参数,则可以删除一个额外的圆圈,但过滤您需要的确切圆圈由您决定。 F.e.如果你只想要顶部的新月形,要求最小的 y 坐标,如果所有的阴影都和这些一样大,你可以只要求半径大于某个阈值的圆等等......

关于python - 霍夫圆变换为圆形阴影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300921/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com