专栏简介 | ||
💒个人主页 📰专栏目录 点击上方查看更多内容 | 📖心灵鸡汤📖 我们唯一拥有的就是今天,唯一能把握的也是今天 建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 | 🧭文章导航🧭 ⬆️ 17.Core之图像连接 ⬇️ 19.待更新 |
Imgproc之色彩映射及颜色空间转换
- 一、色彩映射
- 1.字段
- 2.方法介绍
- 3.自定义colormap
- 4.映射原理
- 二、颜色空间转换
- 1.方法介绍
一、色彩映射
applyColorMap用于将灰度图像转换为彩色图像(伪彩色),这有助于增强图像的可视化效果。
1.字段
列举部分
COLORMAP_RAINBOW | 创建一个彩虹色调的颜色映射 |
COLORMAP_TWILIGHT | 创建一个暮光色调的颜色映射 |
COLORMAP_HOT | 创建一个类似热成像的颜色映射 |
2.方法介绍
applyColorMap(Mat src, Mat dst, int colormap) | |
参数: | |
src | 源图像 |
dst | 输出图像 |
colormap | 要应用的colormap。COLORMAP_* |
//读取图像
Mat mat = Imgcodecs.imread("flip.jpg");
// 创建输出彩色图像
Mat dst = new Mat(mat.rows(), mat.cols(), CvType.CV_8UC3);
// 应用调色板
Imgproc.applyColorMap(mat, dst,Imgproc.COLORMAP_HOT);
HighGui.imshow("dst",dst);
HighGui.waitKey();
结果:
3.自定义colormap
除了使用系统预设的colormap,openCV还支持用户自定义colormap
applyColorMap(Mat src, Mat dst, Mat userColor) | |
参数: | |
src | 源图像 |
dst | 输出图像 |
userColor | 要应用的colormap,类型为CV_8UC1或CV_8UC3,它是一个大小为256x1的Mat对象,userColor的每个元素表示对应灰度值的颜色,可以通过设置不同的颜色值来实现不同的颜色映射效果 复制代码 |
//创建自定义色板
Mat userColor = new Mat(256, 1, CvType.CV_8UC3);
//将每个像素值映射为对应的蓝色,不设置,则随机
for (int i = 0; i < 256; i++) {
userColor.put(i, 0, new double[]{(double) i, 0,0});
/* userColor.put(i, 0, new double[]{(double) 0, i,0});
userColor.put(i, 0, new double[]{(double) 0, 0,i});*/
}
Imgproc.applyColorMap(src, dst,userColor);
在 userColor 矩阵中,共有256行,对应于灰度图像中可能的256个像素值。每一行有三个元素,分别对应于B(蓝)、G(绿)和R(红)通道的强度。
请自行验证结果
4.映射原理
颜色将根据灰度图像中的像素值进行映射(灰度图像中的像素值直接用作索引来选择相应的颜色)。这种方式相当于线性映射的一种形式,
二、颜色空间转换
将图像从一种颜色空间转换为另一种颜色空间.
1.方法介绍
cvtColor(Mat src, Mat dst, int code) | |
参数: | |
src | 源图像 |
dst | 输出图像 |
code | 颜色空间转换编码。参考Imgproc.COLOR_* |
//读取图像
Mat mat = Imgcodecs.imread("flip.jpg");
Mat dst = new Mat();
Imgproc.cvtColor(mat,dst,Imgproc.COLOR_BGR2GRAY);
HighGui.imshow("dst",dst);
HighGui.waitKey();