<p>两种可能性,其中一种在你的答案中提到,而<a href="https://stackoverflow.com/questions/33349533/how-to-detect-the-nearest-square-to-the-image-center-based-on-two-points#comment54495413_33349533">comment by @miki</a></p>
<ol>
<li>正方形中心</li>
</ol>
<p>您不需要实现自己的距离函数。西皮已经有一些了。例如,<code>scipy.spatial.distance.euclidean</code>中的欧几里德距离:</p>
<pre><code>from scipy.spatial import distance
distance.euclidean((x0, y0), (x1, y1))
</code></pre>
<p>不需要重新发明轮子。在</p>
<ol start=“2”>
<li>方形边缘</li>
</ol>
<p>在下面的例子中,可以讨论红色方块还是蓝色方块更靠近中心。根据欧几里得距离,它是蓝色的。不过,红色的是和中心重叠的。在</p>
<p><a href="https://i.stack.imgur.com/PB6sJ.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/PB6sJ.png" alt="enter image description here"/></a></p>
<p>如果你想要一个离中心最近像素的正方形,你可以做如下的事情</p>
^{pr2}$
<h3>编辑问题前的原始答案</h3>
<p>你可以把它分开:</p>
<ol>
<li>导入图像</li>
<li>找到方块
<ol>
<li>找到角落</li>
<li>连接他们</li>
</ol></li>
<li>计算到图像中心的距离</li>
</ol>
<p>这里的要点可能是其中的任何一个(可能除了1.2)。在</p>
<p>有一个整洁的<a href="https://opencv-python-tutroals.readthedocs.org/en/latest/index.html" rel="nofollow noreferrer">OpenCV Python tutorial</a>,它告诉你如何做一些。让我们开始:</p>
<h3>导入</h3>
<pre><code>import cv2
img = cv2.imread('L3h9H.png')
</code></pre>
<p>导入图像。在</p>
<p>要确保导入正确,可以使用</p>
<pre><code>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()
</code></pre>
<p>你就知道了。在</p>
<h3><a href="https://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html" rel="nofollow noreferrer">find corners</a></h3>
<pre><code>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)
</code></pre>
<p>使用一种内置算法查找角点。后面列出拐角。在</p>
<p>下一步将是:</p>
<ul>
<li>计算角落之间的线(也许)。在</li>
<li>显示线条到图像中心的最小距离。在</li>
</ul>
<p>如果你需要更多的帮助就说。在</p>