您的位置:首页 > 编程语言

灰度图转伪彩色图代码

2011-06-08 12:59 337 查看
主要功能是使灰度图中 亮度越高的像素点,在伪彩色图中对应的点越趋向于 红色;亮度越低,则对应的伪彩色越趋向于 蓝色;总体上按照灰度值高低,由红渐变至蓝,中间色为绿色。其对应关系如下图所示:



void F_Gray2Color(CvMat* gray_mat, CvMat* color_mat)
{
if(color_mat)
cvZero(color_mat);

int stype = CV_MAT_TYPE(gray_mat->type), dtype = CV_MAT_TYPE(color_mat->type);
int rows = gray_mat->rows, cols = gray_mat->cols;

// 判断输入的灰度图和输出的伪彩色图是否大小相同、格式是否符合要求
if (CV_ARE_SIZES_EQ(gray_mat, color_mat) && stype == CV_8UC1 && dtype == CV_8UC3)
{
CvMat* red = cvCreateMat(rows, cols, CV_8U);      // 红色分量
CvMat* green = cvCreateMat(rows, cols, CV_8U);   // 绿色分量
CvMat* blue = cvCreateMat(rows, cols, CV_8U);    // 蓝色分量
CvMat* mask = cvCreateMat(rows, cols, CV_8U);

cvSubRS(gray_mat, cvScalar(255), blue);          // blue = 255 - gray
cvCopy(gray_mat, red);                           // red = gray
cvCopy(gray_mat, green);                         // green = gray , if gray < 128
cvCmpS(green, 128, mask, CV_CMP_GE );            //
cvSubRS(green, cvScalar(255), green, mask);      // green = 255 - gray , if gray >= 128
cvConvertScale(green, green, 2.0, 0.0);          // green = 2 * green

// 将蓝绿红三色融合为一幅伪彩色图
cvMerge(blue, green, red, NULL, color_mat);

cvReleaseMat( &red );
cvReleaseMat( &green );
cvReleaseMat( &blue );
cvReleaseMat( &mask );
}
}


trackback: http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=9476
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: