Homography
Homography单应,说的是投影的时候可以逆过来找,具体的可以戳wiki。
用到这个的原因,是因为手头在做的video处理时,需要消除“抖动”,也就是让镜头尽量平稳。换个角度来说,可以看错相邻两个frame找到对应的变化之后变上去。具体的代码已经挂opencv.homography。先show一个效果图~
上面的Img1 Img2分别为相邻两帧,下图的Result是将Img1映射到Img2的方位——可以看到左上角的文字O开始,位置已经开始对应了。
流程
抽取特征值
由于两个frame里面人在动,所以不能直接对图片进行处理。因此需要抽特征值,这里我用的是SURF~在效果图上那个白色的圆圈就是了
计算Homography
这里参考了部分OpenCV sample代码find_obj.cpp。主要是进行配对:相邻两个frame之间哪些特征点是一一对应的。最后使用
cvFindHomography( points1, points2, homography,CV_FM_RANSAC,1.0); |
因为可能还有outliers,所以使用的是RANSAC方法.
Code
具体的我已经封装在Homography.cpp里面了,真正使用的话只要载入图片之后计算即可。
IplImage *img = cvLoadImage("input1.jpg"); |
直接使用OpenCV提供的函数,可以使用矩阵进行图片的变形
cvWarpPerspective(img, img2, homography, CV_INTER_NN+CV_WARP_FILL_OUTLIERS, cvScalar(0)); |
这样也可以实现图片的拼接,如果是一堆“静态”图片的话。OpenCV也是有android版本的,你可以考虑移植一下代码的说。