Eld*_*ila 36 c++ video opencv image-processing
我有一个视频输入,用移动相机拍摄并包含移动物体.我想稳定视频,以便所有静止物体在视频输入中保持静止.我怎么能用OpenCV做到这一点?
即,例如,如果我有两个图像prev_frame和next_frame,我如何变换next_frame,以便摄像机看起来静止?
zer*_*erm 39
我可以建议以下解决方案之一:
编辑 三个评论我应该明确提一下,以防万一:
Oct*_*pus 15
OpenCV具有函数estimateRigidTransform()和warpAffine(),可以很好地处理这类问题.
它几乎就像这样简单:
Mat M = estimateRigidTransform(frame1,frame2,0)
warpAffine(frame2,output,M,Size(640,480),INTER_NEAREST|WARP_INVERSE_MAP)
Run Code Online (Sandbox Code Playgroud)
现在output
包含frame2
最适合的内容frame1
.对于大的移位,M将是一个零矩阵或根本不是一个矩阵,具体取决于OpenCV的版本,因此您必须过滤那些而不应用它们.我不确定那有多大; 可能是帧宽的一半,也许更多.
estimateRigidTransform的第三个参数是一个布尔值,告诉它是否也应用任意仿射矩阵或将其限制为平移/旋转/缩放.为了稳定相机中的图像,您可能只需要后者.实际上,对于相机图像稳定,您可能还希望通过将其归一化以仅旋转和平移来从返回的矩阵中移除任何缩放.
此外,对于移动相机,您可能希望通过时间对M进行采样并计算平均值.
以下是有关estimateRigidTransform()和warpAffine()的更多信息的链接
我错过了这个答案。如何稳定网络摄像头视频?
昨天我刚刚Python
在该主题上做了一些工作,主要步骤如下:
cv2.goodFeaturesToTrack
寻找好的角落。cv2.calcOpticalFlowPyrLK
跟踪角落。cv2.findHomography
计算单应矩阵。cv2.warpPerspective
转换视频帧。但是现在的结果不是那么理想,可能是我应该选择SIFT keypoints
以外的其他方法goodFeatures
。
资源:
稳定汽车: