关闭

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

标签: dst
5783人阅读 评论(0) 收藏 举报
分类:

轉載請注明出處與作者

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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:74574次
    • 积分:642
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论