c++ 不使用applyColorMap 如何实现COLORMAP_HOT的颜色规律
时间: 2024-02-16 19:05:16 浏览: 67
地图染色问题C++实现
4星 · 用户满意度95%
如果不使用`applyColorMap()`函数实现COLORMAP_HOT颜色规律,可以通过手动设置每个像素的颜色来实现。以下是C++代码的一种实现方式:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
Mat applyColormapHot(Mat grayImage) {
Mat colorImage(grayImage.size(), CV_8UC3);
for (int i = 0; i < grayImage.rows; i++) {
for (int j = 0; j < grayImage.cols; j++) {
uchar grayValue = grayImage.at<uchar>(i, j);
uchar r, g, b;
if (grayValue <= 64) { // 黑到红的渐变
r = 0;
g = 0;
b = 4 * grayValue;
} else if (grayValue <= 128) { // 红到黄的渐变
r = 0;
g = 4 * (grayValue - 64);
b = 255;
} else if (grayValue <= 192) { // 黄到白的渐变
r = 4 * (grayValue - 128);
g = 255;
b = 255 - 4 * (grayValue - 128);
} else { // 纯白色
r = 255;
g = 255;
b = 255;
}
colorImage.at<Vec3b>(i, j) = Vec3b(b, g, r);
}
}
return colorImage;
}
int main() {
Mat grayImage = imread("gray_image.jpg", IMREAD_GRAYSCALE);
Mat colorImage = applyColormapHot(grayImage);
imshow("Color Image", colorImage);
waitKey(0);
return 0;
}
```
在这种实现方式中,我们首先创建一个与灰度图像相同大小的彩色图像。然后,我们遍历每个像素,并根据灰度值设置相应的颜色。根据COLORMAP_HOT的颜色规律,我们将颜色分为四个区域:黑到红的渐变、红到黄的渐变、黄到白的渐变和纯白色。对于每个区域,我们计算出相应的RGB颜色值,并将其赋给彩色图像的对应像素位置。最后,我们返回彩色图像并显示它。
阅读全文