如何检测离图像中心点最近的正方形?

2024-09-29 17:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

如何找到离图像中心最近的正方形?在

我已经有了正方形的顶点和中心,只需要找出哪个正方形离中心最近。在

enter image description here

我有一个类似于这张图片的问题。我想选最近的广场(红场)。在


Tags: 图像图片中心广场顶点正方形红场
2条回答

两种可能性,其中一种在你的答案中提到,而comment by @miki

  1. 正方形中心

您不需要实现自己的距离函数。西皮已经有一些了。例如,scipy.spatial.distance.euclidean中的欧几里德距离:

from scipy.spatial import distance
distance.euclidean((x0, y0), (x1, y1))

不需要重新发明轮子。在

  1. 方形边缘

在下面的例子中,可以讨论红色方块还是蓝色方块更靠近中心。根据欧几里得距离,它是蓝色的。不过,红色的是和中心重叠的。在

enter image description here

如果你想要一个离中心最近像素的正方形,你可以做如下的事情

^{pr2}$

编辑问题前的原始答案

你可以把它分开:

  1. 导入图像
  2. 找到方块
    1. 找到角落
    2. 连接他们
  3. 计算到图像中心的距离

这里的要点可能是其中的任何一个(可能除了1.2)。在

有一个整洁的OpenCV Python tutorial,它告诉你如何做一些。让我们开始:

导入

import cv2
img = cv2.imread('L3h9H.png')

导入图像。在

要确保导入正确,可以使用

from matplotlib import pyplot as plt
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()

你就知道了。在

find corners

import numpy as np
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2,3,0.04)
for i, valx in enumerate(dst):
    for j, valy in enumerate(valx):
        if valy > 0:
            print '%s, %s: %s' % (i, j, valy)

使用一种内置算法查找角点。后面列出拐角。在

下一步将是:

  • 计算角落之间的线(也许)。在
  • 显示线条到图像中心的最小距离。在

如果你需要更多的帮助就说。在

这就是我解决问题的办法。其中x0和y0可以是图像中心的坐标,x1和y1是正方形中心的坐标中心。在

import math
def dist(x0, y0, x1, y1):
    a = (x1 - x0)**2 + (y1 - y0)**2
    b = math.sqrt(a)
    return b
print dist(5, 5, 4, 6)
print dist(5, 5, 9, 2)

相关问题 更多 >

    热门问题