一、介绍
    今天是这个系列《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 的第二篇文章,其实也没那么难,感觉是不是还是很好入门的,那就继续。初见成效,继续努力。皇天不负有心人,不忘初心,继续努力,做自己喜欢做的,开心就好。

C++之OpenCV入门到提高002:加载、修改、保存图像的更多相关文章

  1. opencv 加载 修改 保存 图像

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; /* 1 加载图像 cv::imre ...

  2. 对WEB标准以及W3C的理解与认识 - 提高网页加载速度

    在写代码的时候应该注意: 1.标签闭合 2.标签小写 3.不能随意嵌套 提高被搜索引擎搜到几率: mate中的name变量[其中keywords和description尤其重要] Meta name= ...

  3. Swift语法基础入门四(构造函数, 懒加载)

    Swift语法基础入门四(构造函数, 懒加载) 存储属性 具备存储功能, 和OC中普通属性一样 // Swfit要求我们在创建对象时必须给所有的属性初始化 // 如果没办法保证在构造方法中初始化属性, ...

  4. Ionic进行PC端Web开发时通过脚本压缩提高第一次加载效率

    1. 问题 1.1. 问题上下文描述: 基于Ionic进行PC端的Web应用开发: 使用Tomcat作为最终服务发布容器. 1.2. 问题描述: 编译后main.js的大小为4-6MByte.(集成第 ...

  5. Web前端性能优化——如何提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒, ...

  6. 【转】Web前端性能优化——如何提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...

  7. jquery实现图片预加载提高页面加载速度

    使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...

  8. Web前端性能优化——提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...

  9. Web前端性能优化总结——如何提高网页加载速度

    一.提高网页加载速度的必要性 国际知名的一组来自Jupiter Research的数据显示:购物者在访问网站过程中的不满会导致销售损失和品牌受损,其中 77%的人将不再访问网站 ,62%的人不再从该网 ...

  10. OpenCV图像加载与保存

    OpenCV中的图像加载与保存 头文件是包含的库,在GitHub上下载的 imread("图片路径",图片加载方式) 图片加载方式: IMREAD_GRAYSCALE 灰度图像 I ...

随机推荐

  1. 三台服务器上离线安装redis哨兵集群,一主二从三哨兵

    三台服务器上离线安装redis哨兵集群,一主二从三哨兵 系统安装好gcc环境,(不然编译redis会报错).依旧不知道怎么离线安装gcc环境的可查看CentOS下离线安装gcc环境,图文详细 下载 点 ...

  2. css移动端适配方法

    一:前端开发的常用单位 1.像素(px)     1.什么是像素(Pixel)?     在前端开发中视口的水平方向和垂直方向是由很多小方格组成的, 一个小方格就是一个像素     例如div尺寸是1 ...

  3. Camera | 12.瑞芯微摄像头自动焦距马达驱动移植

    本为你主要讲解如何让摄像头ov13850支持自动对焦功能. 摄像头的对角主要通过VCM马达驱动芯片DW9714来实现的. 一.环境 soc : rk3568 board: EVB1-DDR4-V10 ...

  4. 9. 从0学ARM Cortex-A9 LED汇编、C语言驱动编写

    0. 前言 一般我们购买一个开发板,厂家都会给出对应的电路图文件,我们可以通过搜索对应名称来查找到对应的外设.对于驱动工程师来说,我们只需要知道外设与SOC交互的一些数据线和信号线即可. 用主控芯片控 ...

  5. Polly服务熔断

    //自定义异常 public class MyException : Exception { public MyException(string? message) : base(message) { ...

  6. 卷积神经网络CNN实战:MINST手写数字识别——数据集下载与网络训练

    数据集下载 这一部分比较简单,就不过多赘述了,把代码粘贴到自己的项目文件里,运行一下就可以下载了. from torchvision import datasets, transforms # 定义数 ...

  7. Windows PE 安装

    Microsoft 官方提供的 Windows PE 默认只有命令行界面.如果想要使用带有桌面环境的 Windows PE,推荐使用微 PE . 下载并安装 Windows ADK 和 WinPE 加 ...

  8. shiro的rememberMe各种漏洞一刀切解决

    rememberMe的低版本AES固定密码导致的漏洞,高版本仍然有被爆破,穷举的风险等.这种东西总是在安全检测的时候被拿出来说事儿,然而项目中并未开启rememberMe,也就是说压根不需要这个功能. ...

  9. Centos8下搭建私人开源网盘NextCloud步骤及使用(基于LAMP)

    简介:Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步.共享.版本控制.团队协作等功能.它的客户端覆盖了Wind ...

  10. 【YashanDB知识库】YMP元数据阶段二报错YAS-04204

    [问题分类]YMP迁移 [关键字]YMP迁移,YAS-04204 [问题描述]数据库采用最小规格部署,机器配置2C8G,使用YMP进行数据和对象迁移,在元数据阶段二创建索引时报错:YAS-04204 ...