一、概述:

人类能够观察到的光的波长范围是有限的,并且人类视觉有一个特点,只能分辨出二十几种灰度,也就是说即使采集到的灰度图像分辨率超级高,有上百个灰度级,但是很遗憾,人们只能看出二十几个,也就是说信息损失了五十倍。但人类视觉对彩色的分辨能力相当强,能够分辨出几千种色度,所以在实际应用中,可以将灰度图转变成彩虹图或者伪彩图等根据需求的彩色图。

二、彩虹图:

主要思路:把灰度图对应的0~255的数值分别转成彩虹色:红、橙、黄、绿、青、蓝,这里没有使用紫色,是因为紫色的效果并不好。

//彩虹图的颜色分配取一下值
//     R G B gray//----------------------------------// 红 255, 0, 0 255// 橙 255, 127, 0 204// 黄 255, 255, 0 153// 绿 0, 255, 0 102// 青 0, 255, 255 51// 蓝 0, 0, 255 0

代码:

Mat gray2rainbow(const Mat& scaledGray)
{Mat outputRainbow(scaledGray.size(), CV_8UC3);unsigned char grayValue;for (int y = 0; y < scaledGray.rows; y++)for (int x = 0; x < scaledGray.cols; x++){grayValue = scaledGray.at<uchar>(y, x);Vec3b& pixel = outputRainbow.at<Vec3b>(y, x);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 outputRainbow;
}

三、伪彩图

伪彩色图片的处理,就是用RGB三色交叉,不同的彩色表示不同的灰度值,将一幅灰度图转变成为一幅彩色图片。

Mat gray2pseudocolor(const Mat& scaledGray)
{Mat outputPseudocolor(scaledGray.size(), CV_8UC3);unsigned char grayValue;for (int y = 0; y < scaledGray.rows; y++)for (int x = 0; x < scaledGray.cols; x++){grayValue = scaledGray.at<uchar>(y, x);Vec3b& pixel = outputPseudocolor.at<Vec3b>(y, x);pixel[0] = abs(255 - grayValue);pixel[1] = abs(127 - grayValue);pixel[2] = abs(0 - grayValue);}return outputPseudocolor;
}

四、铜色图

将R去0,G、B两色交叉。

Mat gray2CopperColor(const Mat& scaledGray)
{Mat outputCopperColor(scaledGray.size(), CV_8UC3);unsigned char grayValue;for (int y = 0; y < scaledGray.rows; y++)for (int x = 0; x < scaledGray.cols; x++){grayValue = scaledGray.at<uchar>(y, x);Vec3b& pixel = outputCopperColor.at<Vec3b>(y, x);pixel[0] = abs(0);pixel[1] = abs(grayValue);pixel[2] = abs(grayValue);}return outputCopperColor;
}

五、灰度反转

将图像进行灰度反转处理,即将灰度值为x的像素点转变为255-x。

利用Opencv中bitwise_not()函数可实现,没必要一个像素点一个像素点处理。

Mat gray2disColor(const Mat& scaledGray)
{Mat disColor(scaledGray.size(), CV_8UC3);bitwise_not(disColor, scaledGray);return disColor;
}

六、灰度图

将一幅彩色图片转换为灰度图

Mat scaleGray(const Mat& inputGray)
{Mat outputGray(inputGray.size(), CV_8U);unsigned char grayValue, maxValue = 1;for (int y = 0; y < inputGray.rows; y++)for (int x = 0; x < inputGray.cols; x ++){grayValue = inputGray.at<uchar>(y, x);maxValue = max(maxValue, grayValue);}float scale = 255.0 / maxValue;   for (int y = 0; y < inputGray.rows; y++)for (int x = 0; x < inputGray.cols; x ++){outputGray.at<uchar>(y, x) = static_cast<unsigned char>(inputGray.at<uchar>(y, x) * scale + 0.5);}return outputGray;
}

七、完整代码

转载于:https://www.cnblogs.com/aiguona/p/9936638.html

Opencv学习笔记5:Opencv处理彩虹图、铜色图、灰度反转图相关推荐

  1. OpenCV学习笔记#002 OpenCV相机检校例程运行

    OpenCV学习笔记#002 OpenCV相机检校例程运行 OpenCV学习笔记#002 OpenCV相机检校例程运行 所需文件 修改文件 修改in_VID5.xml 修改VID5.xml VS 设置 ...

  2. OpenCV学习笔记之OpenCV安装

    一.  Opencv的安装及配置 Qt有两种版本:mingw版本和MSVC版本.1.MSVC是指微软的VC编译器:2.MinGW是指是Minimalist GNU on Windows的缩写.它是一个 ...

  3. OpenCV学习笔记(12)——OpenCV中的轮廓

    什么是轮廓 找轮廓.绘制轮廓等 1.什么是轮廓 轮廓可看做将连续的点(连着边界)连在一起的曲线,具有相同的颜色和灰度.轮廓在形态分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找 ...

  4. Opencv学习笔记之OpenCV介绍

    一.  OpenCV介绍 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 ...

  5. Opencv学习笔记 - 关于OpenCV的UMat 类

    一个统一的抽象 cv::UMat 允许使用 CPU 或 OpenCL 代码实现相同的 API,而无需显式调用 OpenCL 加速版本.UMat类告诉 OpenCV 函数使用特定于 OpenCL 的代码 ...

  6. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  7. OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...

    函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...

  8. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

  9. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast

    OpenCV学习笔记(五十六)--InputArray和OutputArray的那些事core 看过OpenCV源代码的朋友,肯定都知道很多函数的接口都是InputArray或者OutputArray ...

  10. OpenCV学习笔记(五十一)——imge stitching图像拼接stitching OpenCV学习笔记(五十二)——号外:OpenCV 2.4.1 又出来了。。。。。 OpenCV学习笔记(五

    OpenCV学习笔记(五十一)--imge stitching图像拼接stitching stitching是OpenCV2.4.0一个新模块,功能是实现图像拼接,所有的相关函数都被封装在Stitch ...

最新文章

  1. 在rMBP上利用Python的onetimepass库实现Google Authenticator Application的效果
  2. 思科预计全球云数据流量将以66%的混合年增长率递增
  3. 学计算机需要用手机吗,智能手机能代替电脑吗?
  4. 即时通讯音视频开发(七):音频基础及编码原理入门
  5. 之前写的h5css3动画——月食
  6. 从零写一个编译器(十三):代码生成之遍历AST
  7. [html] 说说页面中字体渲染规则是怎样的?会有哪些因素影响字体的渲染?
  8. 上传github代码
  9. 捷作服务器 修改套接字端口,如何解决错误“每个套接字地址(协议/网络地址/端口)通常只允许使用一次”?...
  10. 你误解了Windows的文件后缀名吗?
  11. websphere Error 404:SRVE0190E: File not found: index.action
  12. vc6.0快捷键小结收藏
  13. 模拟器中安装和使用Drozer总结
  14. 群联PS3111坏硬盘修复记录
  15. 模型预测控制器(MPC)系列: 3.车辆横向MPC控制中的前馈设计
  16. 2020科目一考试口诀_科目一口诀顺口溜2020
  17. 下一代云计算架构,VMware要占“半壁江山”
  18. 图像分析之直方图分析
  19. 计算机网络的发展经历了几个阶段?每个阶段各有什么特点?
  20. Linux中延时/暂停函数(sleep/usleep/nanosleep/select)的比较、底层实现说明

热门文章

  1. 远程桌面连接笔记本,wifi自动断开导致远程断开解决方法
  2. Vibrant Ink Theme for IntelliJ IDEA
  3. 网易云音乐部门技术面
  4. R语言绘图—“金字塔图”
  5. 汉码科技仓储管理信息化解决方案,助力生产企业提升仓储管理水平,提升企业竞争力,提升产品形象
  6. onlyOffice常用api整理(1)
  7. 祝大家2022幸福安康
  8. 计算机表格用计算公式百分百,excel表格怎么算数据的阳性比率-计算机一级用excel表格计算增长比例该怎么算?...
  9. 小米路由器3 刷 linux,小米路由器3刷入LEDE
  10. python相册排版_Python3一键排版证件照(1寸照、2寸照) | 原创