OpenCV -- 02 色彩空间转换函数

学习视频为:https://www.bilibili.com/video/BV1i54y1m7tw?p=3.
在这里插入图片描述
使用imwrite的时候的注意点:
1、路径保存时的路径分隔符为 '/'

2、保存时必须指明保存路径的绝对地址以及保存的文件名是什么,否则会出现异常。

程序代码如下:

02_opencv_cvtColor_imwrite.h

#include <opencv2/opencv.hpp>

using namespace cv;

//可以指定为其他格式,并且可以正常转换
#define gray_save_path "F:/桌面文件/Temporary_code/c++/opencvdemo/OpenMVDemo/gray.jpeg"
#define hsv_save_path  "F:/桌面文件/Temporary_code/c++/opencvdemo/OpenMVDemo/hsv.jpeg"

class QuickDemo {
public:
	void colorSpace_Demo(Mat& image);
};

02_opencv_cvtColor_imwrite.cpp

#include "02_opencv_cvtColor_imwrite.h"

void QuickDemo::colorSpace_Demo(Mat& image)
{
    Mat gray, hsv;
    //转HSV颜色模型
    cvtColor(image,hsv,COLOR_BGR2HSV);
    //H 0--180
    //S 0--255
    //V 0--255

    //转灰度格式
    cvtColor(image, gray, COLOR_BGR2GRAY);
    
    imshow("HSV", hsv);
    imshow("灰度", gray);

    //将图像保存到指定路径下
    imwrite(hsv_save_path,hsv);
    imwrite(gray_save_path, gray);
}

main.cpp

#include <iostream>
#include "02_opencv_cvtColor_imwrite.h"

using namespace std;

int main(int argc,char** argv)
{
    //使用Mat(matrix -- 矩阵)这种类型来读取通过指定路径的图像信息并存放到变量picture中。
    //图像从本质上来说都是二维的数组(矩阵)
    Mat picture = imread("test.jpeg", IMREAD_COLOR);

    if (picture.empty())
    {
        cout << "could not Load image." << endl;
        system("pause");
        return -1;
    }
    
    // namedWindow("输入窗口",WINDOW_FREERATIO);
   
    imshow("输入窗口", picture);

    QuickDemo qd;
    qd.colorSpace_Demo(picture);

    waitKey(0);
    destroyAllWindows();

    system("pause");
    return 0;
}

程序运行结果如下:
在这里插入图片描述

关于imwrite第三个参数的深究

图像格式是基于(输出图像)文件扩展名的,如果不对应(你想输出为jpeg图像,但你压缩格式设置为针对png的),将直接忽略设定值,采用默认值。

为了测试imwrite的第三个参数,修改了02_opencv_cvtColor_imwrite.c的程序,一些注释也在程序中标明。


#include <iostream>

#include "02_opencv_cvtColor_imwrite.h"

using namespace std;
void QuickDemo::colorSpace_Demo(Mat& image)
{
    Mat gray, hsv;

    vector<int> compression_params;

    compression_params.push_back(IMWRITE_JPEG_QUALITY);
    compression_params.push_back(95);

    //RGB颜色模型转HSV颜色模型
    cvtColor(image,hsv,COLOR_BGR2HSV);
    //H 0--180
    //S 0--255
    //V 0--255

    //RGB颜色模型转灰度模型
    cvtColor(image, gray, COLOR_BGR2GRAY);
    
    imshow("HSV", hsv);
    imshow("灰度", gray);

    //将图像保存到指定路径下
    imwrite(hsv_save_path,hsv, compression_params);
    /*
    bool imwrite( const String& filename, InputArray img,
              const std::vector<int>& params = std::vector<int>());

              filename -- 文件路径+文件名
                   img -- 要报存那个图像
                params -- 为特定图像格式保存的参数编码(通过来压缩系数来控制质量)

    保存的图像格式是基于(输出图像)文件扩展名的,
    可保存的扩展名和imread中可以读取的图像扩展名一样,为了方便查看,我们在这里再列一遍:
                
    一般情况下不需要填写。而如果要填写的话,有下面这些需要了解的地方:
    特定格式的保存参数编码成对paramId_1, paramValue_1, paramId_2, paramValue_2, ... .目前支持以下参数:
    对于JPEG,它可以是从0到100的质量(CV_IMWRITE_JPEG_QUALITY)(越高越好)。默认值为95。
    对于PNG,它可以是压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0到9。数值越大,压缩时间越长,越低越好(经过测试和思考)。缺省值为3。
    对于PPM、PGM或PBM,它可以是二进制格式标志(CV_IMWRITE_PXM_BINARY)、0或1。默认值为1。

    */

    imwrite(gray_save_path, gray, compression_params);
}

压缩后保存的图像质量好坏可以通过输出的图像文件大小来进行判别。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xuechanba

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

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

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

打赏作者

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

抵扣说明:

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

余额充值