opencv 从二值图像中心到轮廓最远点的距离[关闭]

h9a6wy2h  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(135)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
Improve this question
主要思想是在Python中找到轮廓距离图像中心最远的点坐标。

通常情况下,可以使用OpenCV中的findcontoursargmin以及argmax找到轮廓的极值点。
然而,对于这个问题,我们需要距离图像中心最远的点,如下图所示:



我们怎样才能达到这个距离?

rjzwgtxy

rjzwgtxy1#

看起来很简单:

import cv2 as cv
import numpy as np

file = r'/Users/lh/Downloads/LTSmL.png'
img = cv.imread(file, 0)

max_intensity = np.max(img)

mask = np.argwhere(img == max_intensity)
center = (img.shape[0]/2, img.shape[1]/2)

maxdist = 0
maxpoint = None

for point in mask:
    dist = np.sqrt((center[0] - point[0])**2 + (center[1] - point[1])**2)
    if dist > maxdist:
        maxdist = dist
        maxpoint = point

img_color = cv.cvtColor(img, cv.COLOR_GRAY2RGB)

img_color[maxpoint[0] - 5:maxpoint[0] + 5, maxpoint[1] - 5:maxpoint[1] + 5] = [0, 0, 255]

cv.imshow('Farthest point in red', img_color)
cv.waitKey()
cv.destroyAllWindows()

print(dist, point)

首先对图像进行遮罩,以找到组成圆的像素,然后计算到每个点的距离,并返回最大距离以及相应的点。
编辑:您可能可以使用np.linalg.normnp.argwhere更优雅地实现这一点,但方法保持不变。

相关问题