OpenCV图片色彩空间转换与图片保存
主要涉及两个函数cv::cvtColor和cv::imwirte
1、API介绍
cv::cvtColor函数原型
cv::cvtColor(
cv::InputArray src,
cv::OutputArray dst,
int code,
int dstCn = 0
);
1.1、参数解释
src
:输入图像(必须是 8-bit、16-bit 或 32-bit 的单通道或多通道图像)。dst
:输出图像,必须与输入图像src
在数据类型和深度上兼容,通常是不同的颜色空间。code
:转换代码,指定颜色空间的转换类型。常见的颜色空间转换代码cv::COLOR_BGR2GRAY
:BGR -> 灰度cv::COLOR_BGR2RGB
:BGR -> RGBcv::COLOR_BGR2HSV
:BGR -> HSVcv::COLOR_BGR2LAB
:BGR -> LABcv::COLOR_BGR2XYZ
:BGR -> XYZcv::COLOR_BGR2HLS
:BGR -> HLScv::COLOR_BGR2YUV
:BGR -> YUVcv::COLOR_GRAY2BGR
:灰度 -> BGRcv::COLOR_HSV2BGR
:HSV -> BGRcv::COLOR_RGB2BGR
:RGB -> BGRcv::COLOR_RGB2GRAY
:RGB -> 灰度- 还有其他多种颜色空间转换方式,详细的可以查阅OpenCV 官方文档
dstCn
(可选):目标图像的通道数,通常为0
,表示根据src
图像的通道数自动推断。
cv::imwrite函数原型
bool cv::imwrite(const std::string& filename,
cv::InputArray img,
const std::vector<int>& params = std::vector<int>());
1.2、参数解释
filename
:要保存的文件的路径和文件名(包括文件扩展名,如.jpg
,.png
等)。它是一个字符串,指定图像保存的目标路径。img
:输入图像,即需要保存的图像数据,类型为cv::Mat
。params
(可选):用于图像编码的参数,具体参数根据保存的图像格式不同而不同。例如:- 对于 PNG 格式,可以使用
cv::IMWRITE_PNG_COMPRESSION
来设置压缩级别。 - 对于 JPEG 格式,可以使用
cv::IMWRITE_JPEG_QUALITY
来设置图像质量。
- 对于 PNG 格式,可以使用
2、参考代码及注释
#include "stdio.h"
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
int main()
{
// 读取图像
cv::Mat srcImage=cv::imread("E:/image/opencv-logo.png");
// 判断图像是否读取成功
if (srcImage.empty())
{
std::cerr << "Error: Image not found." << std::endl;
return -1;
}
//转为灰度图
cv::Mat grayImage;
cvtColor(srcImage, grayImage, cv::COLOR_BGR2GRAY);
//转为HSV
cv::Mat hsvImage;
cvtColor(srcImage, hsvImage, cv::COLOR_BGR2HSV);
// 显示图像
cv::imshow("color", srcImage);
cv::imshow("灰度", grayImage);
cv::imshow("HSV", hsvImage);
//保存转换结果到当前目录
cv::imwrite("cvLogo灰度.png", grayImage);
cv::imwrite("cvLogo-HSV.png", hsvImage);
// 等待按键事件,按任意键关闭窗口
cv::waitKey(0);
destroyAllWindows();
return 0;
}