我使用SIFT算法来产生描述符。在对描述符做了一些处理之后,我得到了一些选定的描述符。现在我想在这些描述符之间画线,因为我想从这些描述符中得到关键点或像素坐标。
我正在尝试使用opencv实现复制移动伪造检测。利用关键点的概念,得到了匹配的描述符对。只是想在那些匹配的描述符之间画一条线。
生成描述符的代码:
sift = cv2.xfeatures2d.SIFT_create()
kp2, desc2 ift.detectAndCompute(gtemp,None)
我得到的最后一个描述符,我想在它们之间画线:
[ 1. 64. 131. 1. 2. 9. 1. 0. 4. 80. 131. 0. 0. 3. 14. 12. 1. 52. 131. 0. 0. 0. 7. 9. 2. 25. 131. 0. 0. 0. 0. 0. 19. 12. 20. 3. 48. 54. 1. 8. 92. 28. 38. 0. 0. 2. 58. 108. 8. 18. 63. 0. 0. 43. 131. 28. 15. 18. 65. 0. 0. 31. 115. 33. 33. 2. 3. 47. 61. 8. 0. 7. 131. 24. 0. 0. 1. 0. 12. 47. 77. 4. 0. 0. 0. 27. 91. 22. 1. 0. 0. 0. 0. 28. 113. 19. 10. 0. 2. 9. 1. 2. 79. 55. 131. 1. 0. 0. 0. 0. 17. 131. 47. 0. 0. 0. 0. 0. 1. 25. 0. 0. 0. 0. 0. 0. 3. 1.] [ 23. 22. 31. 4. 0. 1. 8. 8. 26. 41. 40. 25. 4. 2. 13. 19. 11. 42. 46. 48. 8. 17. 15. 7. 4. 25. 28. 42. 38. 74. 34. 2. 68. 21. 24. 25. 2. 10. 11. 14. 14. 17. 119. 50. 12. 15. 11. 12. 87. 35. 36. 21. 14. 10. 7. 39. 8. 5. 14. 72. 119. 25. 3. 6. 5. 11. 13. 6. 1. 61. 113. 21. 8. 4. 7. 8. 9. 93. 119. 44. 69. 16. 13. 13. 15. 28. 45. 59. 5. 3. 7. 119. 119. 7. 0. 0. 0. 119. 119. 0. 0. 10. 28. 3. 0. 100. 119. 0. 0. 29. 54. 6. 0. 20. 55. 36. 52. 62. 24. 3. 2. 0. 4. 119. 119. 8. 1. 1.]
我想如果我能从这个描述符中得到像素坐标,那么在它们之间画线会更容易。使用python 3.6和OpenCV。
1条答案
按热度按时间hi3rlvi21#
我知道你想在你匹配的两个图像之间画线。
为此,OpenCV有
cv.drawMatches
。此方法的文档在这里。就像这样使用
image3 = cv2.drawMatches(image1, kp1, image2, kp2, matches, None, flags=2)
。另外,如果您需要匹配关键点的像素坐标,则必须读取
cv2.KeyPoint
的pt
属性。例如,如果您想要图像2中所有匹配特征的像素坐标:
在这种情况下,
match.trainIdx
是参考图像2的匹配的id,pt
属性是指该特征点的像素坐标。image1也是如此,但必须读取kp1[match.queryIdx].pt
。