简体   繁体   中英

Interpolate between original and transformed image

In OpenCV I am using feature matching techniques to find matching objects in other images. When I find a matching object I calculate the perspective transformation using the "findHomography" method. FindHomography

This works fine and I can transform images based on this matrix. I have a video which alpha blends between the original and transformed images but now I want to animate the transition between the original and transformed position instead of just alpha blending between the two.

I have the 3x3 Homography matrix which gives me the full transformation but how would I interpolate between no transformation and this? If the 3x3 matrix had single values then I would interpolate between 0 and the Matrix value for however many time steps. However each element of the 3x3 matrix is made up of 3 values, I'm guessing because they are homogenous coordinates.

Could anyone advise the best way to approach this issue.

EDIT

Trying the method suggested by AldurDisciple I am creating the identity matrix with:

Mat eye = Mat::eye(3,3,CV_32F);

And performing the suggested calculation with:

Mat newH = (1-calc) * eye + calc * H;

where calc = k/N for the step/total number of steps.

I get an assertion failed error trying to calculate newH with the error being:

src1.type() == src2.type() in function scaleAdd

One simple way to approach this is to use linear interpolation between the identity matrix (ie no transformation) and the homography matrix you estimated with findHomograhy .

If H is the estimated homography and N is the number of time steps you want to use, then the transformation to apply at step k in [0,N] is as follows: H k = (1-a k ) * Id + a k * H, with a k = k/N.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM