Python中的OpenCV、DMatch对象和Julia don';不匹配

Python中的OpenCV、DMatch对象和Julia don';不匹配,python,c++,opencv,julia,feature-detection,Python,C++,Opencv,Julia,Feature Detection,我正在尝试使用OpenCV实现一种功能匹配方法,但是从Python版本到Julia的转换不匹配: 方法完全相同,使用相同的图像进行处理。([:method]只是访问Julia中特定类型方法的标准约定,所以别傻了!另外,Julia索引从1开始,而不是从0开始,所以这两组print语句应该产生相同的结果,但它们不会。) Julia版本: query = cv2.imread("images/q1.jpg",0) train = cv2.imread("images/q2.jpg",0) orb

我正在尝试使用OpenCV实现一种功能匹配方法,但是从Python版本到Julia的转换不匹配:

方法完全相同,使用相同的图像进行处理。(
[:method]
只是访问Julia中特定类型方法的标准约定,所以别傻了!另外,Julia索引从1开始,而不是从0开始,所以这两组print语句应该产生相同的结果,但它们不会。)

Julia版本:

query = cv2.imread("images/q1.jpg",0)
train = cv2.imread("images/q2.jpg",0) 

orb = cv2.ORB_create()

kp1 = orb[:detect](query)
kp1, des1 = orb[:compute](query, kp1)

kp2 = orb[:detect](train)
kp2, des2 = orb[:compute](train, kp2)

bf = cv2.BFMatcher()
matches = bf[:knnMatch](des1, des2, k=2)

print(matches[1])
print(matches[1][:distance])
query = cv2.imread('images/q1.jpg',0)       
train = cv2.imread('images/q2.jpg',0)

orb = cv2.ORB_create()

kp1 = orb.detect(query)
kp1, des1 = orb.compute(query, kp1)

kp2 = orb.detect(train)
kp2, des2 = orb.compute(train, kp2)

bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)

print(matches[0])
print(matches[0][0].distance)
打印以下内容。只有一个DMatch对象存储在
匹配项中

PyObject <DMatch 0x7fac68b2be50>
305.0639343261719
打印以下内容。两个DMatch对象存储在
匹配中

[<DMatch 0x7f0266a47a70>, <DMatch 0x7f0266a47c50>]
305.0639343261719
在Python中:


PyCall将Python中的嵌套列表转换为Julia中的二维数组。比如说,

julia> pyeval("[[1, 2], [3, 4]]")
2×2 Array{Any,2}:
 1  2
 3  4
这意味着,要访问第一行,当您尝试对进行
匹配[1]
时,您需要
匹配[1,:]
。要访问第一行的第一个元素,请尝试
匹配[1,1]

当您进行
匹配[1]
时,Julia将为您提供匹配中的第一个元素,在本例中,它是第一行的第一列


(请注意,打印时,二维数组通常对齐,元素之间用空格分隔,而一维数组不对齐,元素之间用逗号分隔。这是一个很好的判断方法。)

如果将
打印(匹配[1])
替换为
打印(匹配)
打印(匹配)会发生什么情况
在Julia示例中给出了以下内容:(我也把它放在了问题中)Julia
任何[PyObject PyObject PyObject PyObject…PyObject PyObject PyObject PyObject PyObject PyObject]谢谢。回答如下。@FengyangWang非常感谢您!
julia> pyeval("[[1, 2], [3, 4]]")
2×2 Array{Any,2}:
 1  2
 3  4