我使用了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.]我认为如果我能从这个描述符中得到像素坐标,那么在它们之间画线就会更容易。使用Python3.6和OpenCV。
发布于 2019-09-10 04:13:16
我知道你想在你匹配的两个图像之间画一条线。
为此,OpenCV提供了cv.drawMatches。此方法的文档是here。
像这样使用image3 = cv2.drawMatches(image1, kp1, image2, kp2, matches, None, flags=2)。
此外,如果需要匹配关键点的像素坐标,则必须读取cv2.KeyPoint的pt属性。
例如,如果您想要图2中匹配的所有特征的像素坐标:
for kp in kp2:
for match in matches:
print(kp2[match.trainIdx].pt)在本例中,match.trainIdx是引用image2的匹配项的id,而pt属性是指该特征点的像素坐标。image1也是如此,但你必须阅读kp1[match.queryIdx].pt。
https://stackoverflow.com/questions/57859836
复制相似问题