首页 > 编程语言 >C++之OpenCV入门到提高002:加载、修改、保存图像

C++之OpenCV入门到提高002:加载、修改、保存图像

时间:2024-10-29 10:45:24浏览次数:4  
标签:AUTOSIZE namedWindow OpenCV des C++ 002 WINDOW 图像 const

一、介绍
    今天是这个系列《C++之 Opencv 入门到提高》得第二篇文章。今天这个篇文章很简单,只是简单介绍如何使用 Opencv 加载图像、显示图像、修改图像和保存图像,先给大家一个最直观的感受。但是,不能认为很简单,只是让学习的过程没那么平滑一点,以后的路就好走了。OpenCV 具体的简介内容,我就不多说了,网上很多,大家可以自行脑补。
    OpenCV 的官网地址:https://opencv.org/,组件下载地址:https://opencv.org/releases/
    OpenCV 官网学习网站:https://docs.opencv.ac.cn/4.10.0/index.html

    我需要进行说明,以防大家不清楚,具体情况我已经罗列出来。
        操作系统:Windows Professional 10(64位)
        开发组件:OpenCV – 4.10.0
        开发工具:Microsoft Visual Studio Community 2022 (64 位) - Current版本 17.8.3
        开发语言:C++(VC16)

二、知识讲解
    由于今天的内容很简单,就不过多的写文字了,直接上代码,而且在代码中都进行了详细的注释,开始今天旅程吧。
    源代码中有需要图像的,把地址换成自己的。

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3 
 4 using namespace cv;
 5 using namespace std;
 6 
 7 /// <summary>
 8 /// 图像处理
 9 /// 1、加载图像        imread( const String& filename, int flags = IMREAD_COLOR )
10 /// 2、创建窗口        void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE)
11 /// 3、显示图像        void imshow(const String& winname, InputArray mat)
12 /// 4、修改图像        void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 )
13 /// 5、保存图像        imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>())
14 /// </summary>
15 /// <returns></returns>
16 int main()
17 {
18     //1、加载图像
19     //Mat imread( const String& filename, int flags = IMREAD_COLOR ):第一个参数是图像的地址,第二个参数加载图像的方式。
20     //IMREAD_UNCHANGED(<0)表示加载原图,不做任何修改。
21     //IMREAD_GRAYSCALE(0)表示把原图作为灰度图像加载进来。
22     //IMREAD_COLOR(>0)表示把原图作为 RGB 图像加载进来。
23     // opencv 支持 jpg、png、tiff 等常见的图像格式。
24     Mat src = imread("D:\\360MoveData\\Users\\Administrator\\Desktop\\TestImage\\guanyu.jpg", IMREAD_UNCHANGED);
25 
26     //以灰度图像的方式加载原图
27     Mat src2 = imread("D:\\360MoveData\\Users\\Administrator\\Desktop\\TestImage\\guanyu.jpg", IMREAD_GRAYSCALE);
28 
29     //2、创建窗口
30     //void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE):winname 表示窗口的名称。flags 表示窗口的特性。
31     // namedWindow:表示创建一个指定名称和特性的窗口,这个窗口用于显示图像。它是由 OpenCV 自动创建和销毁的,无需手动释放。
32     //flags:窗口特性列表
33     //WINDOW_AUTOSIZE:自适应图片大小,用户无法修改窗口大小。
34     //WINDOW_FREERATIO:窗口大小自适应比例
35     //WINDOW_FULLSCREEN:全屏显示
36     //WINDOW_GUI_NORMAL:是绘制窗口的旧方法没有状态栏和工具栏,而WINDOW_GUI_EXPANDED是一个新的增强GUI。
37     //WINDOW_KEEPRATIO:保持图像的比例。
38     //WINDOW_NORMAL:跟 QT 集成的时候会使用,允许修改窗口大小。
39     //
40 
41     namedWindow("OrigianImage", WINDOW_AUTOSIZE);
42     namedWindow("GrayImage", WINDOW_AUTOSIZE);
43 
44     //3、显示图像
45     //void imshow(const String& winname, InputArray mat):winname 使用 namedWindow 创建的窗口名称;mat 要显示的图像对象。
46     //imshow:使用 namedWindow 创建的窗口,显示指定的图像。
47 
48     imshow("OrigianImage", src);
49     imshow("GrayImage", src2);
50 
51     //4、修改图像
52     //void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 ):src 源图像,需要转换的图像;dst 色彩空间转换后的图像;code 源色彩空间和目标色彩空间的转换方式;dstCn 
53     //cvtColor:把图像从一个色彩空间转化为另一个色彩空间。
54     //code 列表:
55     //COLOR_BGR2GRAY:从 RGB 转化到 Gray,从彩色转换为灰色。
56     //
57 
58     Mat des;
59     cvtColor(src, des, COLOR_BGR2HSV);
60 
61     namedWindow("cvtColorImage", WINDOW_AUTOSIZE);
62     imshow("cvtColorImage", des);
63 
64 
65     //5、保存图像
66     //imwrite( const String& filename, InputArray img,const std::vector<int>& params = std::vector<int>()):filename 要保存图片的文件名称,包含完整路径和文件名和扩展名,扩展名不同,生成的图像也不同;img 要保存的图像。
67     //imwrite:用于保存为指定名称的图像。
68     //只有8位、16位的 PNG、JPG、TIFF文件格式而且是单通道或者是三通道的 BGR 的图像才可以通过这种方式保存。
69     //保存 PNG 格式的时候可以保存透明通道的图片。
70     //可以指定压缩参数。
71 
72     //保存三种格式,通过后缀名实现。
73     imwrite("D:\\ScanImages\\mypic.png",des);
74     imwrite("D:\\ScanImages\\mypic2.jpg", des);
75     imwrite("D:\\ScanImages\\mypic3.tif", des);
76 
77     waitKey(0);
78 
79     return 0;
80 }

    原图代码:

1 Mat src = imread("D:\\360MoveData\\Users\\Administrator\\Desktop\\TestImage\\guanyu.jpg", IMREAD_UNCHANGED);
2 namedWindow("OrigianImage", WINDOW_AUTOSIZE);

 

3 imshow("OrigianImage", src);

 

    效果如图:

    

    灰度图像的代码:

1 Mat src2 = imread("D:\\360MoveData\\Users\\Administrator\\Desktop\\TestImage\\guanyu.jpg", IMREAD_GRAYSCALE);
2 namedWindow("GrayImage", WINDOW_AUTOSIZE);
3 imshow("GrayImage", src2);

    灰度图像如图:

    

    改变色彩空间的代码:

1 Mat des;
2 cvtColor(src, des, COLOR_BGR2HSV);
3 
4 namedWindow("cvtColorImage", WINDOW_AUTOSIZE);
5 imshow("cvtColorImage", des);

    效果如图:

    

    其他的就不多说了,内容很简单。



三、总结
    这是 C++ 使用 OpenCV 的第二篇文章,其实也没那么难,感觉是不是还是很好入门的,那就继续。初见成效,继续努力。皇天不负有心人,不忘初心,继续努力,做自己喜欢做的,开心就好。

标签:AUTOSIZE,namedWindow,OpenCV,des,C++,002,WINDOW,图像,const
From: https://www.cnblogs.com/PatrickLiu/p/18511288

相关文章

  • c++11智能指针
    普通指针的不足new和new[]的内存需要用delete和deletel]释放。程序员的主观失误,忘了或漏了释放。程序员也不确定何时释放。普通指针的释放类内的指针,在析构函数中释放。C++内置数据类型,如何释放?new出来的类,本身如何释放?C++11新增三个智能指针类型unique_pt......
  • C/C++ 中有哪些基本数据类型?它们的存储大小和取值范围是多少?
      1.整型类型int存储大小:4字节(32位)取值范围:有符号(signedint):-2^(31)到2^(31)-1(即-2,147,483,648到2,147,483,647)short存储大小:2字节(16位)取值范围:有符号(signedshort):-2^(15)到2^(15)-1(即-32,768到32,767)long存储大小:通常为4字......
  • C/C++ 中有哪些常见的运算符?
    1.算术运算符用于执行数学运算。+(加法)-(减法)*(乘法)/(除法)%(取模,返回余数)2.关系运算符用于比较两个值的关系,结果为布尔值(true或false)。==(等于)!=(不等于)>(大于)<(小于)>=(大于等于)<=(小于等于)3.逻辑运算符用于在逻辑表达式中执行布尔逻辑运算。&&(逻辑与,AND)||(逻辑或,OR)!(逻辑非......
  • 【C++】—— priority_queue :平衡效率与秩序的算法利器
    去感受一棵草、一缕风、一场日落,去重新触摸真正的生活。——高盛元目录1、优先级队列1.1什么是优先级队列1.2 priority_queue的使用1.3仿函数2、priority_queue的模拟实现2.1整体框架接口2.2插入&&向上调整2.2删除&&向下调整2.3其他接口2.4优先级队列的应用......
  • 【c++篇】:探索c++中的std::string类--掌握字符串处理的精髓
    ✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨✨个人主页:余辉zmh–CSDN博客✨文章所属专栏:c++篇–CSDN博客文章目录前言一.`std::string`对象的创建二.`std::string`对象的访问三.`std::string`对象的容量四.`std::string`对......
  • day10(Qt)OpenCV
    目录OpenCV1.OpenCV简介2.环境搭建3.人脸检测OpenCV1.OpenCV简介OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能。该库由英特尔公司发起,并在BSD许可证下发布,因此它是免费的,且开放源代码。OpenCV......
  • c++ 异常处理案例自行分析
    19.5异常变量的声明周期classMyException{public:  MyException() {    cout<<"异常变量构造!"<<endl; };    MyException(constMyException&e) {    cout<<"拷贝构造"<<endl; }    /......
  • 【C++练习】基于函数嵌套调用的点餐流程
    题目:基于函数嵌套调用的点餐系统实现描述:        需要实现一个简化的点餐系统,该系统能够处理多位顾客的点餐、支付以及提供食物的过程。系统的主要流程通过函数嵌套调用来实现,包括展示菜单、点餐、生成账单、支付以及提供食物等功能。具体要求:菜单展示:使用 showMe......
  • 青少年编程与数学 02-002 Sql Server 数据库应用 16课题、安全机制
    青少年编程与数学02-002SqlServer数据库应用16课题、安全机制课题摘要:一、安全机制1.身份验证(Authentication)2.授权(Authorization)3.角色(Roles)4.加密(Encryption)5.审计(Auditing)6.其他安全特性二、身份验证1.Windows身份验证模式(WindowsAuthenticationMod......
  • ssm002学院党员管理系统(论文+源码)_kaic
     毕业设计(论文)题目:鄂尔多斯应用技术学院党员管理系统的设计与实现      摘 要互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对鄂尔多斯应用......