1.API
1.imwrite()函数 用于输出图像到文件
imwrite()格式:
bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>())
参数说明:
第一个参数:const string&类型的filename,指写入的文件名。需要带上后缀,如“123.jpg”。
第二个参数:InputArray类型的img,一个mat类型的图像数据。
第三个参数:constvector<int>(),一般情况下不需要填写。如果需要填写,有下面需要了解:
对于JPEG格式的图片,这个参数从0到100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95。
对于PNG格式的图片,这个参数表示压缩级别(CV_IMWRITE_PNG_COPRESSION)从0到9。较高的值表示更小的尺寸和更长的压缩时间,默认值时3。
对于PPM,PGM,或PBM格式的图片,这个参数表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值0或1,默认值时1。
2.cvtColor()函数
是opencv里的颜色空间转换函数,可以实现RGB颜色向HSV,HSI等颜色空间的转换,也可以转换成灰度图像。
函数定义为:
void cvtColor(srcimage,dstimage,int code,int dstCn=0);
参数说明:
第一个参数是输入图像《MAT
第二个参数是输出图像MAT
第三个参数是颜色空间转换的标识符read默认bgr
第四个参数为目标图像的通道数,若该参数是0,表示目标图像取源图像的的通道数。
调用示例:cvtColor(srcimage,dstimage,Color_GRAY2BGR);
cvtColor()函数标识符如下表所示:(通道变换第三个参数,要一一对应不然程序报错)
- 彩色到灰度 -
COLOR_BGR2GRAY
对应数值 6 - 灰度到彩色 -
COLOR_GRAY2BGR
对应数值 8 - BGR到HSV -
COLOR_BGR2HSV
对应数值 40 - HSV到BGR -
COLOR_HSV2BGR
对应数值 54
3.补充知识
RGB和HSV
彩色图像的通道是什么呢?通常彩色图像有BGR三个通道
B,G,R,即按照蓝 绿 红的通道顺序
3个通道都是[0,255],即有256 * 256 * 256种组合
如果加上透明通道A(alpha),透明通道也是[0,255],就有256 * 256 * 256 * 256种组合
HSV通道
H(色调)范围[0,180]
S(饱和度)范围[0,255]
V(明度)范围[0,255]
其中HS表示颜色,V表示亮度所以,不同的通道有不同的作用
比如:有时候有些东西不好处理,它没有一个专门的亮度通道
那我们调整亮度,我们就到HSV色彩空间处理就会更好一点,处理完之后再返回BGR色彩空间
文章来源:https://www.toymoban.com/news/detail-478586.html
2.实例代码 转换和保存
#include "mainwindow.h"
#include <QApplication>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int key;
Mat gray, Lab, HLS;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
//w.show();
namedWindow("windows", WINDOW_NORMAL);
resizeWindow("windows", 500, 500);
Mat srcImage = imread("C:\\Users\\29492\\Desktop\\Qt +opencv\\project\\baocun yu seyuzhuanhuan\\car7.png");
//默认BGR
if (srcImage.empty())
{
printf("could not load image……\n");
}
imshow("windows",srcImage);
cvtColor(srcImage, gray, COLOR_BGR2GRAY); //转换颜色空间
imshow("Gray", gray); //显示效果图
cvtColor(srcImage, Lab, COLOR_BGR2Lab);
imshow("Lab", Lab);
cvtColor(srcImage, HLS, COLOR_BGR2HSV);
imshow("HLS", HLS);
imwrite("C:\\Users\\29492\\Desktop\\Qt +opencv\\project\\baocun yu seyuzhuanhuan\\hsv.png", HLS);
imwrite("C:\\Users\\29492\\Desktop\\Qt +opencv\\project\\baocun yu seyuzhuanhuan\\gray.png", gray);
imwrite("C:\\Users\\29492\\Desktop\\Qt +opencv\\project\\baocun yu seyuzhuanhuan\\Lab.png", Lab);
while(1)
{
key = waitKey(0);
if (key == 'q')
{
destroyAllWindows();
break;
}
}
return a.exec();
}
文章来源地址https://www.toymoban.com/news/detail-478586.html
到了这里,关于C++opencv 色彩空间转换和保存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!