123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /* Sample - Inpainting
- * Target is to apply inpainting using F-transform
- * on the image "input.png". The image is damaged
- * by various types of corruption:
- *
- * input1 = image & mask1
- * input2 = image & mask2
- * input3 = image & mask3
- *
- * Three algorithms "ft::ONE_STEP", "ft::MULTI_STEP"
- * and "ft::ITERATIVE" are demonstrated on the
- * appropriate type of damage.
- *
- * ft::ONE_STEP
- * "output1_inpaint.png": input1, mask1
- *
- * ft::MULTI_STEP
- * "output2_inpaint.png": input2, mask2
- * "output3_inpaint.png": input3, mask3
- *
- * ft::ITERATIVE
- * "output4_inpaint.png": input3, mask3
- *
- * Linear kernel with radius 2 is used for all
- * samples.
- */
- #include "opencv2/core.hpp"
- #include "opencv2/highgui.hpp"
- #include "opencv2/fuzzy.hpp"
- using namespace std;
- using namespace cv;
- int main(void)
- {
- // Input image
- Mat I = imread("input.png");
- // Various masks
- Mat mask1 = imread("mask1.png", IMREAD_GRAYSCALE);
- Mat mask2 = imread("mask2.png", IMREAD_GRAYSCALE);
- Mat mask3 = imread("mask3.png", IMREAD_GRAYSCALE);
- // Apply the damage
- Mat input1, input2, input3;
- I.copyTo(input1, mask1);
- I.copyTo(input2, mask2);
- I.copyTo(input3, mask3);
- // Inpaint with various algorithm
- Mat output1, output2, output3, output4;
- ft::inpaint(input1, mask1, output1, 2, ft::LINEAR, ft::ONE_STEP);
- ft::inpaint(input2, mask2, output2, 2, ft::LINEAR, ft::MULTI_STEP);
- ft::inpaint(input3, mask3, output3, 2, ft::LINEAR, ft::MULTI_STEP);
- ft::inpaint(input3, mask3, output4, 2, ft::LINEAR, ft::ITERATIVE);
- // Save output
- imwrite("output1_inpaint.png", output1);
- imwrite("output2_inpaint.png", output2);
- imwrite("output3_inpaint.png", output3);
- imwrite("output4_inpaint.png", output4);
- // Save damaged input for comparison
- imwrite("input1.png", input1);
- imwrite("input2.png", input2);
- imwrite("input3.png", input3);
- return 0;
- }
|