灰度图转RGB(伪彩色图)

  • 前言
  • 代码
  • 参考

前言

灰度图可以转化成伪彩色图以显示出更多的细节,简单整理了三种转化的方法,结合openCV通过C++进行了实现。

代码

该函数将二维数组转化为伪彩色图并返回,可通过type参数选择不同的转换方法。

Mat Array2RGB(uchar **arr, int rows, int cols, int type)
{//array2grayMat gray(rows, cols, CV_8UC1);for (int i = 0; i < rows; i++){uchar *p = gray.ptr<uchar>(i);for (int j = 0; j < cols; j++){*(p + j) = *(*(arr + i) + j);}}//gray2rgb/*将灰度图像转换为彩色图像,称为灰度图像的伪彩色处理。//伪彩色处理技术的实现方式有很多,如:灰度分割法、灰度级-彩色变换法、滤波法等等。*/Mat M(gray.rows, gray.cols, CV_8UC3);if (type == 0)//灰度级-彩色变换法{for (int i = 0; i < gray.rows; i++){uchar *p = gray.ptr<uchar>(i);uchar temp;for (int j = 0; j < gray.cols; j++){temp = *(p + j);if (0 <= temp && temp <= 63){M.at<cv::Vec3b>(i, j)[0] = 255;//BM.at<cv::Vec3b>(i, j)[1] = 254 - 4 * temp;//GM.at<cv::Vec3b>(i, j)[2] = 0;//R}else if (64 <= temp && temp <= 127){M.at<cv::Vec3b>(i, j)[0] = 510 - 4 * temp;//BM.at<cv::Vec3b>(i, j)[1] = 4 * temp - 254;//GM.at<cv::Vec3b>(i, j)[2] = 0;//R}else if (128 <= temp && temp <= 191){M.at<cv::Vec3b>(i, j)[0] = 0;//BM.at<cv::Vec3b>(i, j)[1] = 255;//GM.at<cv::Vec3b>(i, j)[2] = 4 * temp - 510;//R}else if (192 <= temp && temp <= 255){M.at<cv::Vec3b>(i, j)[0] = 0;//BM.at<cv::Vec3b>(i, j)[1] = 1022 - 4 * temp;//GM.at<cv::Vec3b>(i, j)[2] = 255;//R}}}}else if (type == 1)//gray2pseudocolor{for (int i = 0; i < gray.rows; i++){uchar *p = gray.ptr<uchar>(i);uchar grayValue;for (int j = 0; j < gray.cols; j++){grayValue = *(p + j);Vec3b& pixel = M.at<Vec3b>(i, j);pixel[0] = abs(255 - grayValue);pixel[1] = abs(127 - grayValue);pixel[2] = abs(0 - grayValue);}}}else//gray2rainbow{unsigned char grayValue;for (int i = 0; i < gray.rows; i++){uchar *p = gray.ptr<uchar>(i);uchar grayValue;for (int j = 0; j < gray.cols; j++){grayValue = *(p + j);Vec3b& pixel = M.at<Vec3b>(i, j);if (grayValue <= 51){pixel[0] = 255;pixel[1] = grayValue * 5;pixel[2] = 0;}else if (grayValue <= 102){grayValue -= 51;pixel[0] = 255 - grayValue * 5;pixel[1] = 255;pixel[2] = 0;}else if (grayValue <= 153){grayValue -= 102;pixel[0] = 0;pixel[1] = 255;pixel[2] = grayValue * 5;}else if (grayValue <= 204){grayValue -= 153;pixel[0] = 0;pixel[1] = 255 - static_cast<unsigned char>(grayValue * 128.0 / 51 + 0.5);pixel[2] = 255;}else if (grayValue <= 255){grayValue -= 204;pixel[0] = 0;pixel[1] = 127 - static_cast<unsigned char>(grayValue * 127.0 / 51 + 0.5);pixel[2] = 255;}}}}return M;
}
//以上代码可以优化的两个点:
//1.返回值为Mat类型可太吓人了,最好用一个Mat类型的引用做函数形参,返回类型改为void
//2.用at会很慢,最好改为ptr

参考

如下为上述代码的方法参考,个人更喜欢参考1。

参考1: link.
参考2: link.

灰度图转RGB(伪彩色图)相关推荐

  1. python将灰度图转换为RGB彩色图

    代码如下: from PIL import Image import ospath = r'图片存储的路径' newpath = r'转换后存储图片的路径'def RGBtoGray(path):fi ...

  2. 灰度图、RGB图的区别

    一.灰度图 灰度图就是单通道图像,而单通道图是指维度数为2的图像. 而灰度就是没有色彩,RGB色彩分量全部相等(可将这点与下文的RGB图进行对比).那么灰度图的每个像素点就只有一个值表示颜色,像素值的 ...

  3. 如何把灰度图变为rgb图像

    rgb图像化为灰度图是很容易的,matlab具有自带函数. 灰度图化为rgb图像:Google所得到的参考答案: https://www.mathworks.com/matlabcentral/ans ...

  4. PIL保存二维numpy数组(2,2)为灰度图和RGB图

    如果使用cv2,直接保存二维数组就可以了,只是只能保存为灰度图(8bit):如果偏要保存为RGB图,则需要使用np.stack进行深度的堆叠(每个深度R/G/B的值是相同的),然后再保存就是RGB图了 ...

  5. 【图像增强】灰度图与RGB图Clahe的python实现

    Clahe:Contrast Limited Adaptive Histogram Equalization 对比度受限的自适应直方图均衡化 Clahe的理论解释:   Clahe理论详解1   Cl ...

  6. matlab灰度图转rgb原理,RGB图像转化为灰度图原理以及MATLAB实现

    RGB图像转化为灰度图原理以及MATLAB实现 1 原理 在RGB彩色模型中表示的图像由三个分量图像组成,每种原色一幅分量图像.利用MATLAB对图像进行读取,可以知道存储RGB图像数据为256*25 ...

  7. 将三张灰度图转换为RGB三通道图片python

    import cv2 import numpy as np from PIL import Image import matplotlib.pyplot as plt #使用cv2读取图片 img = ...

  8. Intel Realsense D435 将深度图的灰度图映射为彩色图,打印输出灰度图或彩色图

    # -*- encoding: utf-8 -*- """ @File : test_191123_将深度图打印成黑白图.py @Time : 2019/11/24 15 ...

  9. opencv遍历实现灰度图转伪彩色图[C/C++][附applyColorMap方法]

    灰度图转伪彩色图 数字图像处理的作业,利用opencv实现通过灰度隐射将灰度图转化为伪彩色图. 效果大概如下,在最后附带opencv自带函数处理的方法 原图 遍历图 opencv的 applyColo ...

最新文章

  1. 将MPM雪模拟移植到Maya
  2. Spring2.5.6学习笔记-实例化bean的几种方法
  3. innerhtml js执行_JS 中 DOM 操作
  4. 问题解决: SSR 的 1080 端口被占用
  5. [MySQL基础]数据库存储数据的特点
  6. 《React Native 精解与实战》书籍连载「React Native 网络请求与列表绑定」
  7. 浅谈对px em rem的理解
  8. Java—Queue队列详解(Deque/PriorityQueue/Deque/ArrayDeque/LinkedList)
  9. JAVA 设计模式 职责链模式
  10. 转:全卷积网络(FCN)与图像分割
  11. lua如何打印行号_【Lua与C#交互⑤】Lua中的注册表和引用系统
  12. ubuntu 修改IP,网关等
  13. 数据结构银行排队系统c语言,数据结构银行排队系统.doc
  14. android x5 webview 第一次,android studio中配置X5 webview时的一个坑
  15. 测试面试题+测试面试宝典(分类版)
  16. VS关闭CodeLens 功能
  17. 一文曝光字节跳动薪资职级,资深开发的收入你意想不到~
  18. 沪深300指数的跟踪基金排名
  19. 数据库系统概论实验二——创建及管理数据库
  20. 深航App劫持微信;Apple News上线首日遭遇各种崩溃;华为P30“望远镜手机”正式发布 | 雷锋早报... 1

热门文章

  1. Zjr506的捕猫计划
  2. 什么睡姿最适合宝宝?
  3. NodeJS操作数据库
  4. 高效排序算法——希尔排序、堆排序、归并排序、快速排序
  5. 菜鸟网管的入门之路-第一章、网络及硬件篇(4校园设备管理)
  6. mysql repeatableread_mysql-Innodb事务隔离级别-repeatable read详解(转)
  7. Maple问题解决(一):解决绘图输出(打印)设置之后绘图不再在页面显示的问题
  8. 加入ImportNew的翻译试题
  9. 基于Matlab的自适应滤波算法及其应用
  10. 修改el-input样式