104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| * npr_demo.cpp
 | |
| *
 | |
| * Author:
 | |
| * Siddharth Kherada <siddharthkherada27[at]gmail[dot]com>
 | |
| *
 | |
| * This tutorial demonstrates how to use OpenCV Non-Photorealistic Rendering Module.
 | |
| * 1) Edge Preserve Smoothing
 | |
| *    -> Using Normalized convolution Filter
 | |
| *    -> Using Recursive Filter
 | |
| * 2) Detail Enhancement
 | |
| * 3) Pencil sketch/Color Pencil Drawing
 | |
| * 4) Stylization
 | |
| *
 | |
| */
 | |
| 
 | |
| #include <signal.h>
 | |
| #include "opencv2/photo.hpp"
 | |
| #include "opencv2/imgproc.hpp"
 | |
| #include "opencv2/imgcodecs.hpp"
 | |
| #include "opencv2/highgui.hpp"
 | |
| #include "opencv2/core.hpp"
 | |
| #include <iostream>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| using namespace std;
 | |
| using namespace cv;
 | |
| 
 | |
| int main(int argc, char* argv[])
 | |
| {
 | |
|     cv::CommandLineParser parser(argc, argv, "{help h||show help message}{@image||input image}");
 | |
|     if (parser.has("help"))
 | |
|     {
 | |
|         parser.printMessage();
 | |
|         exit(0);
 | |
|     }
 | |
|     if (parser.get<string>("@image").empty())
 | |
|     {
 | |
|         parser.printMessage();
 | |
|         exit(0);
 | |
|     }
 | |
| 
 | |
|     Mat I = imread(parser.get<string>("@image"));
 | |
| 
 | |
|     int num,type;
 | |
| 
 | |
|     if(I.empty())
 | |
|     {
 | |
|         cout <<  "Image not found" << endl;
 | |
|         exit(0);
 | |
|     }
 | |
| 
 | |
|     cout << endl;
 | |
|     cout << " Edge Preserve Filter" << endl;
 | |
|     cout << "----------------------" << endl;
 | |
| 
 | |
|     cout << "Options: " << endl;
 | |
|     cout << endl;
 | |
| 
 | |
|     cout << "1) Edge Preserve Smoothing" << endl;
 | |
|     cout << "   -> Using Normalized convolution Filter" << endl;
 | |
|     cout << "   -> Using Recursive Filter" << endl;
 | |
|     cout << "2) Detail Enhancement" << endl;
 | |
|     cout << "3) Pencil sketch/Color Pencil Drawing" << endl;
 | |
|     cout << "4) Stylization" << endl;
 | |
|     cout << endl;
 | |
| 
 | |
|     cout << "Press number 1-4 to choose from above techniques: ";
 | |
| 
 | |
|     cin >> num;
 | |
| 
 | |
|     Mat img;
 | |
| 
 | |
|     if(num == 1)
 | |
|     {
 | |
|         cout << endl;
 | |
|         cout << "Press 1 for Normalized Convolution Filter and 2 for Recursive Filter: ";
 | |
| 
 | |
|         cin >> type;
 | |
| 
 | |
|         edgePreservingFilter(I,img,type);
 | |
|         imshow("Edge Preserve Smoothing",img);
 | |
| 
 | |
|     }
 | |
|     else if(num == 2)
 | |
|     {
 | |
|         detailEnhance(I,img);
 | |
|         imshow("Detail Enhanced",img);
 | |
|     }
 | |
|     else if(num == 3)
 | |
|     {
 | |
|         Mat img1;
 | |
|         pencilSketch(I,img1, img, 10 , 0.1f, 0.03f);
 | |
|         imshow("Pencil Sketch",img1);
 | |
|         imshow("Color Pencil Sketch",img);
 | |
|     }
 | |
|     else if(num == 4)
 | |
|     {
 | |
|         stylization(I,img);
 | |
|         imshow("Stylization",img);
 | |
|     }
 | |
|     waitKey(0);
 | |
| }
 | 
