我使用knnMatch匹配图像的关键点,并且因为我的匹配计数通常超过10,000,所以knnMatch需要花费大量时间来运行,我必须为目录中的每个图像执行此操作,我目前使用for循环(如果有大约15个图像,每个循环执行大约需要30分钟)。有时程序会被杀死。我可以改为使用多线程进行knnMatch,以便所有图像同步匹配,然后我选择最高的inlier来拼接吗?在这种情况下,如何存储每个匹配的inlier,因为我无法从不同的线程写入相同的变量。
如果多线程不是一个可行的选择,是否有其他方法可以加快我正在做的事情?
答案 0 :(得分:1)
只需调整KAZE探测器的阈值:
cv2.KAZE_create()
在这种情况下,检测器的阈值= 0.001(默认值)
cv2.KAZE_create(threshold=0.01)
在这种情况下,探测器比使用默认值的点数少。
在不影响结果的情况下提高性能的另一种方法是缩小您正在使用的图像的大小:)
例如,如果您希望图像为100x100:
resized_image = cv2.resize(image, (100,100))
<强>文档:强> http://docs.opencv.org/3.0-beta/modules/imgproc/doc/geometric_transformations.html#void调整大小(InputArray src,OutputArray dst,Size dsize,double fx,double fy,int interpolation)