OpenCV教程——加载、修改、保存图像

本文介绍了颜色空间的概念,如RGB和HLS,以及OpenCV库在加载、显示和转换图像方面的方法,包括imread函数的不同模式和cvtColor函数的应用。示例代码展示了如何使用OpenCV读取、转换和显示图像。
摘要由CSDN通过智能技术生成

1.颜色空间

颜色空间:也称彩色模型(又称彩色空间彩色系统)。本质上,彩色模型是坐标系统和子空间的阐述。位于系统的每种颜色都有单个点表示。RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究中一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。

2.加载图像

cv::imread功能是加载图像文件成为一个Mat对象。

cv::imread有两个参数:

  1. 第一个参数表示图像文件名称。
  2. 第二个参数表示加载的图像是什么类型,支持常见的三个参数值:
    • IMREAD_UNCHANGED(<0)表示加载原图,不做任何改变。
    • IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来。
    • IMREAD_COLOR(>0)表示把原图作为RGB图像加载进来。

⚠️OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载。

👉Demo1:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
    Mat src=imread("/Users/xinshichao/PersonalWork/C++Demo/Pictures/p1.jpeg",IMREAD_UNCHANGED);
    if(src.empty()){
        printf("could not find the image...\n");
        return -1;
    }
    namedWindow("src",WINDOW_AUTOSIZE);
    imshow("src",src);
    waitKey(0);
    return 0;
}

Demo1输出结果:

👉Demo2:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
    Mat src=imread("/Users/xinshichao/PersonalWork/C++Demo/Pictures/p1.jpeg",IMREAD_GRAYSCALE);
    if(src.empty()){
        printf("could not find the image...\n");
        return -1;
    }
    namedWindow("src",WINDOW_AUTOSIZE);
    imshow("src",src);
    waitKey(0);
    return 0;
}

Demo2输出结果:

👉Demo3:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
    Mat src=imread("/Users/xinshichao/PersonalWork/C++Demo/Pictures/p1.jpeg",IMREAD_COLOR);
    if(src.empty()){
        printf("could not find the image...\n");
        return -1;
    }
    namedWindow("src",WINDOW_AUTOSIZE);
    imshow("src",src);
    waitKey(0);
    return 0;
}

Demo3输出结果(和Demo1结果一样,因为原图就是RGB彩色图像):

3.显示图像

cv::namedWindow的功能是创建一个OpenCV窗口,它是由OpenCV自动创建与释放,用户无需销毁它。

常见用法:

 
1
namedWindow("Window Title",WINDOW_AUTOSIZE)

WINDOW_AUTOSIZE会自动根据图像大小,显示窗口大小,不能人为改变窗口大小。

WINDOW_NORMAL允许修改窗口的大小。

cv::imshow根据窗口名称显示图像到指定的窗口上去,第一个参数是窗口名称,第二个参数是Mat对象。

代码示例见第2部分的Demo1~Demo3。

4.修改图像

cv::cvtColor的功能是把图像从一个彩色空间转换到另一个彩色空间,有三个参数,第一个参数表示源图像,第二个参数表示彩色空间转换之后的图像,第三个参数表示源和目标色彩空间,如:COLOR_BGR2HLSCOLOR_BGR2GRAY等。

HLS彩色空间:色调(H),亮度(L),饱和度(S)。

是BGR而不是RGB是因为一个像素点内三个通道的排列顺序就是B、G、R。

Demo4:

 
1
2
3
4
    Mat src_gray;
    cvtColor(src,src_gray,COLOR_BGR2GRAY);
    namedWindow("src_gray",WINDOW_AUTOSIZE);
    imshow("src_gray",src_gray);

Demo4输出结果同Demo2。

5.保存图像

cv::imwrite可以保存图像到指定目录路径。

只有8位、16位的PNG、JPG、Tiff文件格式而且是单通道或者三通道的BGR图像才可以通过这种方式保存。

保存PNG格式的时候可以保存透明通道的图片。

可以指定压缩参数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员柳

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

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

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

打赏作者

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

抵扣说明:

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

余额充值