答案 0 :(得分:2)
这是我解决问题的方法。其中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)
答案 1 :(得分:2)
两种可能性,其中一个在您的答案和comment by @miki
中提及您无需实施自己的距离功能。 SciPy已经有一些。例如,scipy.spatial.distance.euclidean
中的欧几里德距离:
from scipy.spatial import distance
distance.euclidean((x0, y0), (x1, y1))
无需重新发明轮子。
在下面的例子中,可以说红色或蓝色方块是否更接近中心。通过欧几里德距离,它是蓝色的。但红色与中心重叠。
如果你想让距离中心的像素最近的正方形,你可以做类似
的事情square = (upper_left_x, upper_left_y, lower_right_x, lower_right_y)
center = (x, y)
if upper_left_x <= x <= lower_right_x and upper_left_y <= y <= lower_right_y:
return 0 # point in square
elif upper_left_x <= x <= lower_right_x: # on vertical line
return min(upper_left_y -y, lower_right_y - y)
elif upper_left_y <= y <= lower_right_y: # on horizontal line
return min(upper_left_x -x, lower_right_x - x)
else:
points = []
for x in (upper_left_x, lower_right_x):
for y in (upper_left_y, lower_right_y):
points.append((x,y))
return min([distance.euclidean((x,y), p) for p in points])
您可以将其拆分:
这里的要点可能是其中任何一个(可能除了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()
向您展示。
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)
使用其中一种内置算法查找角落。之后列出了角落。
接下来的步骤是:
说你是否需要更多帮助。