python 椭圆检测_opencv python中的椭圆检测

我的图片在这里:

我正在寻找更好的解决方案或算法来检测这张照片中的椭圆形部分(盘),并在Opencv中的另一张照片中对其进行遮罩.

你能给我一些建议或解决方案吗?

我的代码是:

circles = cv2.HoughCircles(img, cv2.HOUGH_GRADIENT, 1.2, 1, param1=128, minRadius=200, maxRadius=600)

# draw detected circles on image

circles = circles.tolist()

for cir in circles:

for x, y, r in cir:

x, y, r = int(x), int(y), int(r)

cv2.circle(img, (x, y), r, (0, 255, 0), 4)

# show the output image

cv2.imshow("output", cv2.resize(img, (500, 500)))

解决方法:

Xie,Yonghong和Qiang Ji制作的skimage中有另一种替代方法,并出版为…

“A new efficient ellipse detection method.” Pattern Recognition, 2002.

Proceedings. 16th International Conference on. Vol. 2. IEEE, 2002.

他们的椭圆检测代码相对较慢,此示例大约需要70秒;相比网站声称“ 28秒”.

如果您有conda或pip:“名称”,请安装scikit-image并试一试…

可以找到here或下面的副本/粘贴其代码:

import matplotlib.pyplot as plt

from skimage import data, color, img_as_ubyte

from skimage.feature import canny

from skimage.transform import hough_ellipse

from skimage.draw import ellipse_perimeter

# Load picture, convert to grayscale and detect edges

image_rgb = data.coffee()[0:220, 160:420]

image_gray = color.rgb2gray(image_rgb)

edges = canny(image_gray, sigma=2.0,

low_threshold=0.55, high_threshold=0.8)

# Perform a Hough Transform

# The accuracy corresponds to the bin size of a major axis.

# The value is chosen in order to get a single high accumulator.

# The threshold eliminates low accumulators

result = hough_ellipse(edges, accuracy=20, threshold=250,

min_size=100, max_size=120)

result.sort(order='accumulator')

# Estimated parameters for the ellipse

best = list(result[-1])

yc, xc, a, b = [int(round(x)) for x in best[1:5]]

orientation = best[5]

# Draw the ellipse on the original image

cy, cx = ellipse_perimeter(yc, xc, a, b, orientation)

image_rgb[cy, cx] = (0, 0, 255)

# Draw the edge (white) and the resulting ellipse (red)

edges = color.gray2rgb(img_as_ubyte(edges))

edges[cy, cx] = (250, 0, 0)

fig2, (ax1, ax2) = plt.subplots(ncols=2, nrows=1, figsize=(8, 4), sharex=True,

sharey=True,

subplot_kw={'adjustable':'box-forced'})

ax1.set_title('Original picture')

ax1.imshow(image_rgb)

ax2.set_title('Edge (white) and result (red)')

ax2.imshow(edges)

plt.show()

标签:scikit-image,python,python-2-7,opencv

你可能感兴趣的:(python,椭圆检测)