gpt4 book ai didi

Python opencv 角落

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:52 26 4
gpt4 key购买 nike

我试图找到这些三角形角的像素值。我可以使用 Harris 角并获得角的所有 x、y 的 numpy 数组。我希望将这些角值存储在称为角的二维列表中,如 [[x1,y1], [x2,y2], [x3,y3]]

此外,当我在黑色三角形(下面发布的代码)、白色背景上使用 Harris 角时,结果是这样的 (array([121, 121, 122, 122, 123, 123, 124, 124 , 359, 359, 359, 359, 359, 359, 360, 360, 360, 360], dtype=int64), 数组([240, 241, 240, 241, 240, 241, 240, 241, 121, 122, 123, 358, 359,360, 121, 122, 359, 360], dtype=int64))。我需要根据该列表创建包含 3 个角的二维列表。

img = cv2.imread(filePath)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = numpy.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
x,y = numpy.nonzero(dst > 0.01 * dst.max())

最佳答案

对于当前值,最简单的方法是应用 k 均值,它将数据聚类为 k 组,并为您提供这些组的中心团体。您可以查看 OpenCV k-means Python 教程 here并查看 cv2.kmeans() docs .

所以从以下形式的点开始:

>>> X = np.array([121, 121, 122, 122, 123, 123, 124, 124, 359, 359, 359, 359, 359, 359, 360, 360, 360, 360], dtype=np.int64)
>>> Y = np.array([240, 241, 240, 241, 240, 241, 240, 241, 121, 122, 123, 358, 359, 360, 121, 122, 359, 360], dtype=np.int64)

我们将创建一个 numpy 数组,将这些点作为 32 位 float 保存在一起,作为 cv2.kmeans() 的输入:

>>> points = np.array([[x, y] for x, y in zip(X,Y)], dtype=np.float32)

最后一件事是运行 cv2.kmeans() 并获取中心:

>>> criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
>>> centers = cv2.kmeans(points, 3, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)[2]
>>> centers
array([[ 122.5 , 240.5 ],
[ 359.3999939 , 359.20001221],
[ 359.3999939 , 121.80000305]], dtype=float32)

当然,如果需要,您可以四舍五入到最接近的整数。

关于Python opencv 角落,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47621718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com