我正在编写一个python库来对几何图像进行基本处理。其中一个理想的功能是返回所有角落的距离列表。距原点的距离。在查看我的角落物体的印刷品后,我正在努力解决这个问题;
[[ 9.20031281e+01 9.20031281e+01 9.20031281e+01 ..., 6.66796863e-01
1.01710939e+01 1.01710939e+01]
[ 1.36668701e+02 1.36668701e+02 1.36668701e+02 ..., 1.33374023e+00
1.07448441e+02 1.07448441e+02]
[ 1.36668701e+02 1.36668701e+02 1.36668701e+02 ..., 1.33374023e+00
1.07448441e+02 1.07448441e+02]
...,
[ -7.81250012e-04 3.12500005e-03 1.83593743e-02 ..., 3.36616707e+01
2.24355469e+01 2.24355469e+01]
[ -4.88281257e-05 3.12500005e-03 5.41992206e-03 ..., 3.67563972e+01
2.24355469e+01 2.24355469e+01]
[ -4.88281257e-05 5.37109387e-04 5.37109387e-04 ..., 3.67563972e+01
2.24355469e+01 2.24355469e+01]]
此图像看起来像这样(注意两个粉红色检测到的角落);
如何从原点到角落找到距离(角度不是必需的,虽然也有用)?
谢谢!
答案 0 :(得分:0)
以下是检索每个匹配的(x,y)
位置的示例。我会说实话,它不是最好的做事方式,也可能是最快的方式,但它有效(我也没有对检测参数进行微调)。
import cv2
import numpy as np
import math
filename = "/Users/me/Downloads/square.jpg"
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
for y in range(0, gray.shape[0]):
for x in range(0, gray.shape[1]):
harris = cv2.cv.Get2D(cv2.cv.fromarray(dst), y, x) # get the x,y value
# check the corner detector response
if harris[0] > 0.01*dst.max():
print x,y # these are the locations of the matches
print 'Distance in pixels from origin: %d' % math.sqrt(x**2+y**2)
# draw a small circle on the original image
cv2.circle(img,(x,y),2,(155, 0, 25))
cv2.imshow('Harris', img) # show the image
cv2.waitKey()
答案 1 :(得分:0)
我在一段时间后重新审视了这一点,发现Shi-Tomasi方法允许更加明显,最重要的是,可以更快地访问角坐标。
corners = cv2.goodFeaturesToTrack(image, 4, 0.5, 10)
将填充角落,文档中解释的参数,然后;
for i in self.new_corners: #draws on corners
x,y = i.ravel()
每次迭代都会暴露坐标。
我确信这也可以通过角落哈里斯,我只是找不到任何描述它所创造的物体的东西。