【问题标题】:Detect a simple circle in an image and find its radius using numpy检测图像中的简单圆并使用 numpy 找到它的半径
【发布时间】:2016-11-01 12:28:23
【问题描述】:

我有一张图片,里面有一个简单的圆圈。

如何使用 numpy 检测圆并找到它的半径?

我尝试学习,但不能。我想从你在这里回答的程序中学习。

目前我只知道:

from scipy import misc
f = misc.imread("/path/to/file.png")
# then dont know what to do

这是图片 - https://c2.staticflickr.com/6/5476/14135136623_3973d3f03c_b.jpg

【问题讨论】:

  • Checkout this link 以及其中的示例。
  • 你知道图像永远是一个简单的黑色背景和一个白色的圆圈吗?或者它可能是别的东西?如果图像总是只有黑白像素,并且只有一个没有其他白色像素的白色圆圈,那就简单多了。
  • 你可以说背景是黑色的,圆圈里面是黑色的,但圆圈的边框是红色的
  • 好像圆圈内可能有一些随机的黑色形状,或者圆圈是由黑色背景上的单线(一定宽度)组成的?
  • 它非常简单。圆圈只是用黑色填充。

标签: python numpy


【解决方案1】:

我现在假设图像总是由黑色图像中的一个非黑色圆圈组成。

我还假设您并不特别关心算法的效率。

循环遍历图像中的所有像素,保留所有白色像素的 x 和 y 坐标的总和、计数、最小值和最大值(最小值/最大值仅适用于 x 或 y,而不是两者)。像这样的东西(只是粗略-我没有安装 scipy atm):

circle_count = 0

circle_sum_x = 0
circle_sum_y = 0

circle_min_x = 0
circle_max_x = 0

for y in range(image_height):
    for x in range(image_width):
        if pixel(x,y) is not black:
            circle_count += 1

            circle_sum_x += x
            circle_sum_y += y

            circle_min_x = min(circle_min_x, x)
            circle_max_x = max(circle_max_y, y)

if circle_count == 0:
    print "No circle found!"
else:
    circle_center_x = circle_sum_x / circle_count
    circle_center_y = circle_sum_y / circle_count
    circle_radius = (circle_max_x - circle_min_x) / 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多