// Listing 2.5. Wczytywanie i wygładzanie obrazu przed wyświetleniem go na ekranie

#include <opencv2/opencv.hpp>



void help(char** argv ) {
	std::cout << "\n"
	<< "2.5: wczytuje i wygładza obraz, który następnie wyświetla.\n"
	<< argv[0] <<" <path/video>\n"
	<< "Na przykład:\n"
	<< argv[0] << " ../tree.avi\n"
	<< std::endl;
}
	

int main( int argc, char** argv ) {
	
	if (argc != 2) {
		help(argv);
		return 0;
	}

  // Wczytuje obraz wskazany w wierszu poleceń.
  //
  cv::Mat image = cv::imread(argv[1],-1);

  // Tworzy okna, do prezentacji obrazów wejściowego
  // i wyjściowego.
  //
  cv::namedWindow( "Listing 2.5-wejście", cv::WINDOW_AUTOSIZE );
  cv::namedWindow( "Listing 2.5-wyjście", cv::WINDOW_AUTOSIZE );

  // tworzy okno do prezentacji obrazu wejściowego
  //
  cv::imshow( "Listing 2.5-wejście", image );

  // tworzy obraz do przechowywania wygładzonego wyniku
  //
  cv::Mat out;

  // wygładzanie
  // (Uwaga: można użyć GaussianBlur(), blur(), medianBlur() lub
  // bilateralFilter(). )
  //
  cv::GaussianBlur( image, out, cv::Size(5,5), 3, 3);
  cv::GaussianBlur( out, out, cv::Size(5,5), 3, 3);

  // wyświetlenie wygładzonego obrazu w oknie wyjściowym
  //
  cv::imshow( "Listing  2.5-wyjście", out );

  // gdy użytkownik naciśnie jakiś klawisz, okna ulegną autodestrukcji
  //
  cv::waitKey( 0 );

}
