OpenCV を用いて、Image Inpainting を行う
◆プログラムの例
#include<cv.h> #include<highgui.h> #include<photo/photo.hpp> // This program is 'inpaint' sample using namespace cv; int main( int argc, char** argv ) { Mat rgb, mask, rgb2, rgb3; // read original image rgb = imread( "/usr/local/share/opencv/samples/c/fruits.jpg", /* 3-channel color image */ 1 ); // mask is white rectangle on a black background mask = Mat::zeros(rgb.size(), CV_8U); rectangle( mask, Point(40,40), Point(160,160), Scalar::all(255), CV_FILLED, 8, 0 ); // do inpaint inpaint(rgb, mask, rgb2, /* inpaint radius */ 10.0, /* INPAINT_NS or INPAINT_TELEA */ INPAINT_NS); inpaint(rgb, mask, rgb3, /* inpaint radius */ 10.0, /* INPAINT_NS or INPAINT_TELEA */ INPAINT_TELEA); // display namedWindow( "mask", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO ); imshow( "mask", mask ); waitKey(0); // display namedWindow( "INPAINT_NS", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO ); imshow( "INPAINT_NS", rgb2 ); waitKey(0); // display namedWindow( "INPAINT_TELEA", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO ); imshow( "INPAINT_TELEA", rgb3 ); waitKey(0); return 0; }
◆プログラム中で使用している OpenCV の機能
◆ Linux でのビルド手順例
g++ -o a.out hoge.cc -I/usr/local/include/opencv2 -I/usr/local/include/opencv -L/usr/local/lib -lopencv_photo -lopencv_highgui -lopencv_core
◆ 実行結果の例 (OpenCV バージョン 2.4.1 で実行)
./a.out