text: ﻿#pragma once
  
  #include <iostream>
  #include <opencv2/opencv.hpp>
  #include <opencv2/highgui.hpp>
  #include <opencv2/core/core.hpp>
  
  using namespace cv;
  
  class Converter
  {
  	/*
  	Hàm chuyển đổi không gian màu của ảnh từ RGB sang GrayScale
  	sourceImage: ảnh input
  	destinationImage: ảnh output	
  	Hàm trả về
  	0: nếu chuyển thành công
  	1: nếu chuyển thất bại (không đọc được ảnh input,...)
  	*/
  	int RGB2GrayScale(const Mat& sourceImage, Mat& destinationImage);	
  
  	/*
  	Hàm chuyển đổi không gian màu của ảnh từ GrayScale sang RGB
  	sourceImage: ảnh input
  	destinationImage: ảnh output
  	Hàm trả về
  	0: nếu chuyển thành công
  	1: nếu chuyển thất bại (không đọc được ảnh input,...)
  	*/
  	int GrayScale2RGB(const Mat& sourceImage, Mat& destinationImage);
  	
  
  	/*
  	Hàm chuyển đổi không gian màu của ảnh từ RGB sang HSV
  	sourceImage: ảnh input
  	destinationImage: ảnh output
  	Hàm trả về
  	0: nếu chuyển thành công
  	1: nếu chuyển thất bại (không đọc được ảnh input,...)
  	*/
  	int RGB2HSV(const Mat& sourceImage, Mat& destinationImage);
  	
  	
  	
  	/*
  	Hàm chuyển đổi không gian màu của ảnh từ HSV sang RGB
  	sourceImage: ảnh input
  	destinationImage: ảnh output
  	Hàm trả về
  	0: nếu chuyển thành công
  	1: nếu chuyển thất bại (không đọc được ảnh input,...)
  	*/
  	int HSV2RGB(const Mat& sourceImage, Mat& destinationImage);
  	
  	
  	
  public:
  	/*
  	Hàm chuyển đổi không gian màu của ảnh
  	sourceImage: ảnh input
  	destinationImage: ảnh output cùng kích thước, cùng loại với ảnh input
  	type: loại chuyển đổi
  		0,1: chuyển từ RGB sang GrayScale và ngược lại
  		2,3: chuyển từ RGB sang HSV và ngược lại		
  	Hàm trả về
  		0: nếu chuyển thành công
  		1: nếu chuyển thất bại (không đọc được ảnh input hay type không chính xác,...)
  	*/
  	int Convert(Mat& sourceImage, Mat& destinationImage, int type);
  	// int Convert(IplImage* sourceImage, IplImage* destinationImage, int type);
  	// Converter();
  	// ~Converter();
  };
  
  