灰度图转伪彩色图
来源:互联网 发布:qq视频变声软件 编辑:程序博客网 时间:2024/04/19 05:17
前言
人类能够观察到的光的波长范围是有限的,并且人类视觉有一个特点,只能分辨出二十几种灰度,也就是说即使采集到的灰度图像分辨率超级高,有上百个灰度级,但是很遗憾,人们只能看出二十几个,也就是说信息损失了五十倍。但人类视觉对彩色的分辨能力相当强,能够分辨出几千种色度。
代码
#include <opencv2/opencv.hpp>using namespace cv;using namespace std;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;}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;}/* * color R G B gray * red 255 0 0 255 * orange 255 127 0 204 * yellow 255 255 0 153 * green 0 255 0 102 * cyan 0 255 255 51 * blue 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;}int main(int argc, char* argv[]){ if (argc < 5) { cout << "Usage: ./gray2rgb inputGray scaledGray pseudocolor rainbow" << endl; return 0; } Mat inputGray = imread(argv[1], 0); Mat scaledGray = scaleGray(inputGray); Mat pseudocolor = gray2pseudocolor(scaledGray); Mat rainbow = gray2rainbow(scaledGray); imwrite(argv[2], scaledGray); imwrite(argv[3], pseudocolor); imwrite(argv[4], rainbow); return 0;}
结果
0 0
- 灰度图转伪彩色图
- 灰度图转伪彩色图
- C#灰度图转伪彩色图
- 彩色图转为灰度图
- 彩色图转灰度图
- 彩色图转灰度图
- 彩色图像转灰度图
- 真彩色转换灰度图
- 彩色图像--伪彩处理 灰度图转伪彩色图像
- 灰度图、黑白图,彩色图理解
- 彩色图到灰度图的转换
- java实现彩色图转变为灰度图
- 彩色图转灰度图的原理
- 如何分辨彩色图与灰度图
- opencv灰度图转换成彩色图
- python彩色图转化为灰度图
- tensorflow让彩色图变成灰度图
- 彩色图转灰度图原理
- Unity design patterns and concepts, looking for good sources
- Payment Terms 付款条件
- C++12.2 隐含的this指针(不懂)、mutable数据成员
- 我曾经面试过这样一个问题
- 今日之谬言,不谦谓悟道
- 灰度图转伪彩色图
- 快捷键让SublimeText在编文件快速在浏览器打开
- Google I/O 2013:Volley 图片缓存教程
- Sublime Text 3 安装Package Control官方教程
- 黑马day04 凤姐艺妓录&防盗链
- 从assets中把zip资源包复制到SD卡中
- 他山之石
- 什么是MD5,什么是SHA-1,如何校验这些Hash。还有拿单个ISO文件的MD5,SHA-1讯问是不是原版的问题,
- 在改版的Spring官网下载所需的jar包