我正在使用calcOpticalFlowPyrLK,findHomography,warpPerspective来做视频稳定。
结果稳定,这很好,但也有失真。在顶部/底部,你可以看到边缘,因为warpPerspective进行了转换,有时中间被压碎了。
我理解这是它的作用的一部分,但我想知道我能做些什么来消除这些丑陋的扭曲呢?
最糟糕的情况是,我可以告诉它仅在2D上进行转换,类似于相位相关吗?
更新:链接到示例图片:http://i.imgur.com/OuuGU.png
Update2,代码:
calcOpticalFlowPyrLK(baseGray, gray, points[0], points[1], status, err, winSize, 3, termcrit, 0, 0.001);
lastHomography = findHomography(points[0], points[1], CV_RANSAC, 3);
warpPerspective(image, newImage, lastHomography, image.size(), WARP_INVERSE_MAP, BORDER_TRANSPARENT);
答案 0 :(得分:3)
您提供的图像中的工件看起来像是最近邻插值的结果。
根据文档的默认插值方法应该是线性插值。但是通过使用WARP_INVERSE_MAP
标志而没有明确指定插值方法,opencv似乎使用最近邻居方法。
因此,问题的解决方案是明确指定插值方法。
warpPerspective(image, newImage, lastHomography, image.size(), INTER_LINEAR | WARP_INVERSE_MAP, BORDER_TRANSPARENT);