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

1.API

1.imwrite()函数       用于输出图像到文件

imwrite()格式:

bool imwrite(const string& filename, InputArray img, const vector& params=vector())

参数说明:

第一个参数:const string&类型的filename,指写入的文件名。需要带上后缀,如“123.jpg”。

第二个参数:InputArray类型的img,一个mat类型的图像数据。

第三个参数:constvector(),一般情况下不需要填写。如果需要填写,有下面需要了解:

对于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

C++opencv 色彩空间转换和保存_第1张图片

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 
#include 
#include 
#include 

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


 

你可能感兴趣的:(C++,opencv,开发语言,opencv,计算机视觉)