OpenCV學習心得(4) -- 色彩空間的轉

原创 2012年03月21日 19:05:45

轉載請注明出處與作者

OpenCV提供了一個函數cv::cvtColor可以進行色彩空間的轉換. 提供了將近100種的類型轉換.

例如CV_BGR2HLS,CV_RGB2HLS,CV_HLS2RGB等等...

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )

這個函數可以進行不同色彩空間的轉換.

第三個參數code是轉換類型,使用預定義的宏,格式類似于CV_源空間格式2新空間格式.

第四個參數dstCn是轉換后的channel數.默認情況下是0,即根據源格式和新格式自動確定.


我們這個類中只封裝了幾個類型,最常用的就是ToGray函數,將彩色圖像轉換為單channel的灰度圖.

如果需要可以自行封裝.

注意:一般情況下cv::Mat中存儲的格式為BGR格式.

public: //色彩空間變換//注意默認情況下Mat中存儲的格式為BGR.
	//一下函數均是從BGR格式轉換到其他格式(invert為true時是從其他格式轉換為BGR格式)
	//如果源格式非BGR(或反向轉換的目的格式不是BGR)請使用ConvertColor函數進行轉換.
	bool ToGray(int invert=false);
	bool ToXYZ(int invert=false);
    bool ToYCrCb(int invert=false);
	bool ToHSV(int invert=false);
	bool ToLab(int invert=false);
	bool ToHLS(int invert=false);
	//!色彩空間變換.type為變換類型,使用CV_<src color type>2<dest colot type>格式,例如 CV_RGB2HSV
	bool ConvertColor(int type);

bool COpenCVImage::ToGray(int invert)
{
	cv::Mat m;
	if(invert) cv::cvtColor(m_src,m,CV_GRAY2BGR);
	else cv::cvtColor(m_src,m,CV_BGR2GRAY);
	m_src=m;
    m_modifyed_for_draw=true;
	return true;
}
bool COpenCVImage::ToXYZ(int invert)
{
	cv::Mat m;
	if(invert) cv::cvtColor(m_src,m,CV_XYZ2BGR);
	else cv::cvtColor(m_src,m,CV_BGR2XYZ);
	m_src=m;
    m_modifyed_for_draw=true;
	return true;
}
bool COpenCVImage::ToYCrCb(int invert)
{
	cv::Mat m;
	if(invert) cv::cvtColor(m_src,m,CV_YCrCb2BGR);
	else cv::cvtColor(m_src,m,CV_BGR2YCrCb);
	m_src=m;
    m_modifyed_for_draw=true;
	return true;
}
bool COpenCVImage::ToHSV(int invert)
{
	cv::Mat m;
	if(invert) cv::cvtColor(m_src,m,CV_HSV2BGR);
	else cv::cvtColor(m_src,m,CV_BGR2HSV);
	m_src=m;
    m_modifyed_for_draw=true;
	return true;
}

bool COpenCVImage::ToLab(int invert)
{
	cv::Mat m;
	if(invert) cv::cvtColor(m_src,m,CV_Lab2BGR);
	else cv::cvtColor(m_src,m,CV_BGR2Lab);
	m_src=m;
    m_modifyed_for_draw=true;
	return true;
}

bool COpenCVImage::ToHLS(int invert)
{
	cv::Mat m;
	if(invert) cv::cvtColor(m_src,m,CV_HLS2BGR);
	else cv::cvtColor(m_src,m,CV_BGR2HLS);
	m_src=m;
    m_modifyed_for_draw=true;
	return true;
}


相关文章推荐

opencv︱图像的色彩空間cvtColor(HSV、HSL、HSB )及相关色彩学

一、色彩空间理论几种色彩空间:1、RGBRed 红色,0-255 Green 绿色,0-255 Blue 蓝色,0-255 2、HSIHSI色彩空间可以用一个圆锥空间模型来描述。用这种 描述H...

opencv学习心得(六)新版本绘制外形轮廓

最近在研究opencv2.3.1版本函数,因为函数结构使用C++类型的,所以在一些函数调用上有很多差别,但是在运行速度上提高不少,所以还是新版本好用。其实在新版本发布是,会有相关的使用手册,很多例子会...

c++和opencv学习心得

1.表达式a^2中,a必须为int型的,而pow(a,2)中a可以是float型的;2.sqrt(b),b在c++下为float或double long型,在c下一般为double型;(msdn:C+...
  • ycx2006
  • ycx2006
  • 2011年03月10日 21:44
  • 733

OpenCV學習心得(11) -- Mat類型與Arraya

轉載請注明出處與作者 下面對Mat矩陣進行一些說明: 1. cv::Mat中的數據不需要釋放.cv::Mat會自動釋放. 例如,cv::Mat m=cv::imread("123.jpg")...

OpenCV學習心得(7) -- 閾值處理

轉載請注明出處與作者 OpenCV提供了2個函數來處理閾值. 第一個函數 double threshold(InputArray src, OutputArray dst, double thr...

OpenCV學習心得(8) -- 直方圖的顯示

轉載請注明出處與作者 這裡只討論1維的直方圖 void calcHist(const Mat* arrays, int narrays, const int* channels, InputArr...

OpenCV學習心得(6) -- 圖像的縮放

轉載請著名出處與作者 OpenCV提供了一個實現圖像縮放的函數:cv::resize void resize(InputArray src, OutputArray dst, Size dsize...

opencv学习心得(一)鼠标响应事件绘制轮廓

//#include "gaosi.h" #include #include #include using namespace cv; using namespace std; //声明全局变...

opencv学习心得(六)新版本绘制外形轮廓。

最近在研究opencv2.3.1版本函数,因为函数结构使用C++类型的,所以在一些函数调用上有很多差别,但是在运行速度上提高不少,所以还是新版本好用。其实在新版本发布是,会有相关的使用手册,很多例子会...

OpenCV學習心得(5) -- 圖像通道分離

轉載請注明出處與作者 OpenCV提供了一個函數可以進行通道的分離,就是 cv::split. void split(const Mat& mtx, vector& mv); void sp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV學習心得(4) -- 色彩空間的轉
举报原因:
原因补充:

(最多只允许输入30个字)