C++下opencv学习笔记(图像的简单读取丶显示与存储)
Posted 枫三
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++下opencv学习笔记(图像的简单读取丶显示与存储)相关的知识,希望对你有一定的参考价值。
C++下opencv学习笔记(一)(图像的简单读取丶显示与存储)
- 前言
学习C++ OpenCV,第一需要具备向对象语言的基础,第二要对图像处理机器学习有基础了解,容易入门。觉得自己基础已经有了可以忽略前面两条,直奔OpenCV SDK,学习OpenCV最好的资料是OpenCV社区的教程和文档,其次是各种视频资源与博客文章。
首先是环境配置教程(个人觉得很不错) :
其次是Python环境下Opencv相关教程(有Python基础或学习意向推荐参考):
OpenCV概述
OpenCV是一个开源发行的跨平台计算机视觉和机器学习软件库,提供了图像处理和计算机视觉方面的很多通用算法。而现在我们将要学习的是C++环境下Opencv库的使用。
一 . 开始第一步-展示图片
1.main.cpp 源码
#include<iostream>
#include<opencv2/opencv.hpp>
//主函数
int main(void)
//定义Mat 类 对象src
cv::Mat src;
//读取图像
src = cv::imread("DrawPractice.jpg");
//展示图片
cv::imshow("Draw", src);
//暂停 -- 等待下一步操作
cv::waitKey(0);
return 0;
2.当前路径下存有图片 DrawPractice.jpg
3.让我们逐步分析源码语句
第一步在原有C++程序上包含opencv库头文件
(标准输入输出库)常用
#include<iostream>
(Opencv库头文件)
#include<opencv2/opencv.hpp>
抉择-----是否全局引入std命名空间和cv命名空间
using namespace std;
using namespace cv;
这两句是引入工作空间,std是c++标准库的工作空间名,cv是opencv的工作空间名。
(工作空间的目的是避免 如果两个库有相同的函数名,在调用函数时发生冲突,
上文这两个库里没有重复的函数名,所以直接引入工作空间不会有影响。)
引入命名空间后 大部分代码块将不再使用cv:: 来进行标识 如(Mat src;) 而不是 (cv::Mat src;)
个人初学时 常使用cv::标识形式 以提醒自己 所调用的函数或类 在 Opencv库中
定义一个Mat 类对象 src
cv::Mat src;
在当前路径下读取图像
src = cv::imread("DrawPractice.jpg");
cv::imread() ---- 函数解析
//读取图像
cv::imread("图像路径",读取模式)
此处图像路径可以为 当前路径 即 DrawPractice.jpg
也可以为 绝对路径 如 F:\\\\code\\\\编程练习草稿\\\\opencv2\\\\DrawPractice.jpg
(备注 :: C++语法中 \\ 为转义字符 所以 使用\\\\ 双斜杠代替 \\ 避免路径解析错误)
//读取模式
未传入参数视为 默认彩色
0:读入的为灰度图像(即使图像为彩色的)
1:读入的图像为彩色的(默认);
//实例
//读入灰度图像
src = cv::imread("DrawPractice.jpg" , 0);
//默认读入彩色图像
src = cv::imread("DrawPractice.jpg");
展示上文读取的图像
cv::imshow("Draw", src);
参数 : (展示窗口名 , 上文定义的Mat类对象src)
暂停 -- 等待下一步操作
cv::waitKey(0);
显示图片后开始等待下一步操作。
如果不加这条命令的话,自己屏幕上会有一个黑框一闪而过,
图片也不会显示出来,程序显示图片后直接关闭了程序。
二--跑起来看看成果
那么第一期就结束啦
以上是关于C++下opencv学习笔记(图像的简单读取丶显示与存储)的主要内容,如果未能解决你的问题,请参考以下文章