首页 > 解决方案 > 自动将图像转换为对象的相同位置

问题描述

假设您有各种图像,如下所示。

Python OpenCV 中是否有一个函数可以自动水平平移图像,以便主要对象的位置与参考图像(第一张图像)上的位置大致相同?

用数学的话来说,它只是计算:

score[x] = image_correlation(ref_image, image2.translate_horizontally(x))

尽可能x in range(-200,200)(如果图像宽度为 200)

并采取x最大化这个分数。

在从头开始重做之前,OpenCV 中是否已经存在此功能?

(使用图像的质量中心?其他涉及image_correlationOpenCV 中已经存在的函数的技术?还是Scale Invariant Feature Transform技术?)


例子:

参考图片:

在此处输入图像描述

图2:

在此处输入图像描述--> 自动翻译为 -->在此处输入图像描述

标签: pythonopencvcomputer-visionsignal-processingsift

解决方案


我终于很容易地解决了:您必须提供背景参考(在我的情况下只有绿色背景)ref.png

然后背景减法+质心效果很好:

import cv2
import scipy.ndimage as ndi 

backSub = cv2.createBackgroundSubtractorMOG2()  # or backSub = cv.createBackgroundSubtractorKNN()

frame = cv2.imread('ref.png')
backSub.apply(frame)
frame = cv2.imread('1.png')
mask = backSub.apply(frame)
cv2.imwrite('mask.png', mask)
print(ndi.center_of_mass(mask))

结果:(63.6349484521314、164.158143799214)

然后,我们可以比较连续帧的这个质心并进行适当的平移。

在此处输入图像描述


推荐阅读