user2726456
user2726456

Reputation:

Find and replace image using openCV

I am using openCV to write a code that can find and replace one image with another image

Here is my 1st image enter image description here

Now i have 2nd image as this enter image description here

I need to replace the second image with this enter image description here

and final output should be like this enter image description here

So how to start about ? I am not sure how can i find it, I tried using Template Matching but the images are supposed to be exactly equal for template matching, and when my images are distorted or skewed in some manner then it doesn't work ?

How can i match the image get the bounds using openCV, and replace with another image ? Any help would be appreciated Thank you

Upvotes: 1

Views: 1576

Answers (2)

Girish Nair
Girish Nair

Reputation: 5216

You can use this SURF Algorithm for matching the images as show here

The code

line( img_scene , scene_corners[0] + Point2f( img_object .cols, 0), scene_corners[1] + Point2f( img_object .cols, 0), Scalar(0, 255, 0), 4 );

will draw image not on the scene image but on object so use this

line( img_scene , scene_corners[0], scene_corners[1] , Scalar(0, 255, 0), 4 );
line( img_scene , scene_corners[1] , scene_corners[2] , Scalar( 0, 255, 0), 4 );
line( img_scene , scene_corners[2] , scene_corners[3], Scalar( 0, 255, 0), 4 );
line( img_scene , scene_corners[3] , scene_corners[0], Scalar( 0, 255, 0), 4 );

Now to replace the image use this

Mat temp;
cv::resize(mReplacementImage,temp,img_object .size());
warpPerspective(temp, mReplacementImage, H, img_scene .size());
Mat mask = cv::Mat::ones(img_object .size(), CV_8U);
Mat temp2;
warpPerspective(mask, temp2, H, img_scene .size());
mReplacementImage.copyTo(img_scene , temp2);
cv::imwrite("output.bmp",img_scene );

Upvotes: 0

eiki
eiki

Reputation: 510

SURF algorithm, that's you want it. OPENCV SURF Example

Upvotes: 1

Related Questions