zoukankan      html  css  js  c++  java
  • 灰度图转伪彩色图代码

    主要功能是使灰度图中 亮度越高的像素点,在伪彩色图中对应的点越趋向于 红色;亮度越低,则对应的伪彩色越趋向于 蓝色;总体上按照灰度值高低,由红渐变至蓝,中间色为绿色。其对应关系如下图所示:
    gray2rgb.JPG
    1 void F_Gray2Color(CvMat* gray_mat, CvMat* color_mat)
    2 {
    3 if(color_mat)
    4 cvZero(color_mat);
    5
    6 int stype = CV_MAT_TYPE(gray_mat->type), dtype = CV_MAT_TYPE(color_mat->type);
    7 int rows = gray_mat->rows, cols = gray_mat->cols;
    8
    9 // 判断输入的灰度图和输出的伪彩色图是否大小相同、格式是否符合要求
    10 if (CV_ARE_SIZES_EQ(gray_mat, color_mat) && stype == CV_8UC1 && dtype == CV_8UC3)
    11 {
    12 CvMat* red = cvCreateMat(rows, cols, CV_8U); // 红色分量
    13 CvMat* green = cvCreateMat(rows, cols, CV_8U); // 绿色分量
    14 CvMat* blue = cvCreateMat(rows, cols, CV_8U); // 蓝色分量
    15 CvMat* mask = cvCreateMat(rows, cols, CV_8U);
    16
    17 cvSubRS(gray_mat, cvScalar(255), blue); // blue = 255 - gray
    18 cvCopy(gray_mat, red); // red = gray
    19 cvCopy(gray_mat, green); // green = gray , if gray < 128
    20 cvCmpS(green, 128, mask, CV_CMP_GE ); //
    21 cvSubRS(green, cvScalar(255), green, mask); // green = 255 - gray , if gray >= 128
    22 cvConvertScale(green, green, 2.0, 0.0); // green = 2 * green
    23
    24 // 将蓝绿红三色融合为一幅伪彩色图
    25 cvMerge(blue, green, red, NULL, color_mat);
    26
    27 cvReleaseMat( &red );
    28 cvReleaseMat( &green );
    29 cvReleaseMat( &blue );
    30 cvReleaseMat( &mask );
    31 }
    32 }

    trackback: http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=9476
  • 相关阅读:
    作用域链及作用域面试题
    this在js中的作用
    dom对象
    作用域问题
    逻辑运算
    socket.io 的使用
    mongoDB 的使用
    使用 usb 调试的时候,连接上电脑没反应
    uni-app 的更新及碰到的问题
    WebSocket 的使用
  • 原文地址:https://www.cnblogs.com/JohnShao/p/2075070.html
Copyright © 2011-2022 走看看