예제 #1
0
int main(int argc, char* argv[])
{
  if(argc < 7) {
    show_usage();
    return -1;
  }
  std::string src_file = argv[1];
  std::string target_file = argv[2];
  std::string mask_file = argv[3];
  int offx = atoi(argv[4]);
  int offy = atoi(argv[5]);
  bool mix = (argv[6]=="true" || atoi(argv[6])>0) ? true : false;
 
  cv::Mat src_img = cv::imread(src_file, 1);
  if(!src_img.data) return -1;
   
  cv::Mat target_img = cv::imread(target_file, 1);
  if(!target_img.data) return -1;
 
  cv::Mat mask_img = cv::imread(mask_file, 0);
  if(mask_img.empty()) return -1;
 
  Blend::PoissonBlender pb = Blend::PoissonBlender(src_img, target_img, mask_img);
   
  cv::Mat dst_img;
  double f = 1000.0/cv::getTickFrequency();
  int64 time = cv::getTickCount();
  pb.seamlessClone(dst_img, offx, offy, mix);
  std::cout<<(cv::getTickCount()-time)*f<<" [ms]"<<std::endl;
  cv::imwrite("test.png", dst_img);
 
  return 0;
}
예제 #2
0
int
main(int argc, char* argv[])
{
	if (argc < 7) {
		show_usage();
		return -1;
	}
	std::string src_file = argv[1];
	std::string target_file = argv[2];
	std::string mask_file = argv[3];
	int offx = atoi(argv[4]);
	int offy = atoi(argv[5]);
	bool mix = (argv[6] == "true" || atoi(argv[6])>0) ? true : false;

	cv::Mat src_img = cv::imread(src_file, 1);
	if (!src_img.data) return -1;

	cv::Mat target_img = cv::imread(target_file, 1);
	if (!target_img.data) return -1;

	cv::Mat mask_img = cv::imread(mask_file, 0);
	if (mask_img.empty()) return -1;

	//cv::Ptr<Blend::PoissonBlender> pb = &Blend::PoissonBlender(src_img, target_img, mask_img);
	Blend::PoissonBlender pb = Blend::PoissonBlender(src_img, target_img, mask_img);

	cv::Mat dst_img;
	double f = 1000.0 / cv::getTickFrequency();
	pb.seamlessClone(dst_img, offx, offy, mix);
	cv::imwrite("test.png", dst_img);
	IplImage image(dst_img);
	IplImage *image2 = cvCloneImage(&image);
	int64 time = cv::getTickCount();
	cvSmooth(&image, image2,  CV_BLUR, 3, 3, 0);

	std::cout << (cv::getTickCount() - time)*f << " [ms]" << std::endl;

	cvNamedWindow("out");
	cvShowImage("out", image2);
	cvWaitKey(0);
	return 0;
}