python - 自动将图像转换为对象的相同位置
问题描述
假设您有各种图像,如下所示。
Python OpenCV 中是否有一个函数可以自动水平平移图像,以便主要对象的位置与参考图像(第一张图像)上的位置大致相同?
用数学的话来说,它只是计算:
score[x] = image_correlation(ref_image, image2.translate_horizontally(x))
尽可能x in range(-200,200)
(如果图像宽度为 200)
并采取x
最大化这个分数。
在从头开始重做之前,OpenCV 中是否已经存在此功能?
(使用图像的质量中心?其他涉及image_correlation
OpenCV 中已经存在的函数的技术?还是Scale Invariant Feature Transform技术?)
例子:
参考图片:
图2:
解决方案
我终于很容易地解决了:您必须提供背景参考(在我的情况下只有绿色背景)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)
然后,我们可以比较连续帧的这个质心并进行适当的平移。
推荐阅读
- mysql - 在版本 8 中替换 mysql.proc
- python - 如何使多个“os.popen”进程同时启动(python 2.x)
- javascript - 控制台中的错误:未捕获的 TypeError:无法读取 null 的属性“getAttribute”
- c# - 不包含“HasDefaultValue”的定义
- jsp - 如何在 OpenAM 中获取标头属性?
- python - 如何使用 Python(不使用 PySpark)将 pandas 数据框插入到现有的 Hive 外部表中?
- javascript - 根据 csv 文件中的 x 轴值绘制 Y 轴数据:Highcharts
- html - 如何在dataview中制作水平滚动条
- c# - 通过代理使用 KeyVaultClient
- vb.net - 在 rdlc 报告中将数字转换为 Word