Today we will make Image synthesis by using ROI, Masking, binarization.
The full code is like that.
The full code is like that.
#include <iostream> #include "opencv2/opencv.hpp" using namespace std; using namespace cv; int main() { Mat me = imread("./res/pic/mh.jpg"); Mat animal = imread("./res/pic/animal_head.png"); Mat animalGray; Mat mask_ani; Mat mask_ani_inv; imshow("me origin", me); imshow("animal", animal); cvtColor(animal, animalGray, CV_BGR2GRAY); // color to black and white
threshold(animalGray, mask_ani, 10, 255, 0); // make binary
bitwise_not(mask_ani, mask_ani_inv); imshow("mask ani inv", mask_ani_inv); imshow("mask ani", mask_ani); Mat imgRoi; imgRoi = me(Rect(50, 50, animal.cols, animal.rows)); imshow("imgRoi", imgRoi); Mat me_back; Mat ani_for; bitwise_and(animal, animal, ani_for, mask_ani); // mask with mask_ani
bitwise_and(imgRoi, imgRoi, me_back, mask_ani_inv); // mask with mask_ani_inv
imshow("ani_for", ani_for); imshow("me_back", me_back); Mat dst; add(me_back, ani_for, dst); //add background of roi , foreground of animal
dst.copyTo(imgRoi); // result copy to imgRoi imshow("dst", dst); imshow("result", me); waitKey(0); return 0; }
- Make binary images for masking background and foreground images
cvtColor(animal, animalGray, CV_BGR2GRAY); // color to black and white
threshold(animalGray, mask_ani, 10, 255, 0); // make binary
bitwise_not(mask_ani, mask_ani_inv);
- Make image ROI and fit to the synthesis position.
Mat imgRoi; // start at x:50, y:50, size width: animal.cols, height: animal.rows
imgRoi = me(Rect(50, 50, animal.cols, animal.rows)); imshow("imgRoi", imgRoi);
- Remove animal image background and the part of the image ROI that will contain the animal picture by using bitwise operation.
Mat me_back; Mat ani_for; bitwise_and(animal, animal, ani_for, mask_ani); // remove background
bitwise_and(imgRoi, imgRoi, me_back, mask_ani_inv); // remove foreground
imshow("ani_for", ani_for); imshow("me_back", me_back);
- Finally add background of ROI, foreground of animal image.
Mat dst; add(me_back, ani_for, dst); //add background of roi , foreground of animal
dst.copyTo(imgRoi); // result copy to imgRoi
imshow("dst", dst); imshow("result", me); waitKey(0);
Comments
Post a Comment