C++opencv 色彩空间转换和保存

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色彩空间
 

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();
}


 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打酱油的;

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值