第1章 邂逅OpenCV

1.1 OpenCV周边概念认知

1.图像处理(Image Processing):计算机对图像进行分析,以达到所需结果的技术,又称影像处理。侧重处理。
2.图像处理技术:图像压缩,增强和复原,匹配、描述和识别3个部分。
3.数字图像:工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组。数组元素为像素,值为灰度值。
4.数字图像处理(Digital Image Processing):通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
5.计算机视觉(computer vision):用摄影机和电脑替代人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,用电脑处理使之成为更合适人眼观察或传送给仪器检测的图像的一门学科。侧重模拟。
6.OpenCV(Open Source Computer Vision Library):一个基于开源发行的跨平台计算机视觉库。可以运行在多种操作系统上,由一系列C函数和C++类构成,还支持C#、Ch7、Ruby等编程语言,同时提供Python、Ruby、MATLAB等语言的接口。

OpenCV应用:人机交互、物体识别、图像分区、人脸识别、动作识别、运动跟踪、机器人

1.2 OpenCV基本构架分析

1.\opencv\build\include目录:opencv、opencv2文件夹分别包含旧版、新版头文件
2.opencv2文件夹中:opencv_modules.hpp的hpp文件存放OpenCV2中与新模块构造相关的代码说明,定义了OpenCV2所有组件的宏。

3.OpenCV所有模块
(1)【calib3d】–Calibration(校准)和3D,相机校准和三维重建,包括基本的多视角集合算法、单个立体摄像头标定、物体姿态估计、立体相似性算法、3D信息的重建。
(2)【contrib】–Contributed/Exprimental Stuf,新型人脸识别、立体匹配、人工视网膜模型等技术。
(3)【core】–核心功能模块,包含OpenCV基本数据结构、动态数据结构、绘图函数、数组操作相关函数、辅助功能与系统函数和宏、与OpenGL的互操作。
(4)【imgproc】–图像处理模块,包含线性和非线性的图像滤波、图像的几何变换、其他图像变换、直方图相关、结构分析和形状描述、运动分析和对象跟踪、特征检测、目标检测等。
(5)【features2d】–2D功能框架,包含特征检测和描述、特征检测器(Feature Detectors)通用接口、描述符提取器(Descriptor Extractors)通用接口、描述符匹配器(Descriptor Matchers)通用接口、通用描述符(Generic Descriptor)匹配器通用接口、关键点绘制函数和匹配功能绘制函数。
(6)【flann】–Fast Library for Approximate Nearest Neighbors,高维的近似近邻快速搜索算法库,包括快速近似最近邻搜索、聚类。
(7)【gpu】–运用GPU加速的计算机视觉模块
(8)【highgui】–高层GUI图形用户接口界面,包含媒体的输入输出、视频捕捉、图像和视频的编码解码、图形交互界面的接口等。
(9)【legacy】–废弃代码库
(10)【ml】–Machine Learning,机器学习模块,统计模型和分类算法
(11)【nonfree】–一些具有专利的模块,包含特征检测和GPU相关的内容
(12)【objdetect】–目标检测模块,包含Cascade Classifacation(级联分类)和Latent SVM
(13)【ocl】–OpenCL-accelerated Computer Vision,运用OpenCL加速的计算机视觉组件模块
(14)【photo】–Computational Photography,包含图像修复和图像去噪
(15)【stitching】–images stitching,图像拼接模块,包含拼接流水线、特点寻找和匹配的图像、估计旋转、自动校准、图片歪斜、接缝估测、曝光补偿、图片混合
(16)【superres】–SuperResolution,超分辨率技术的相关功能模块
(17)【ts】–OpenCV测试相关代码
(18)【video】–视频分析组件,包含运动估计、背景分离、对象跟踪等
(19)【Videostab】–Video stabilization,视频稳定相关的组件

1.3 OpenCV3

项目构架改变:OpenCV基本构架中,是一个相对与整体的项目,各个模块以整体的形式构建组合。而OpenCV3抛弃整体构架,使用内核+插件的构架形式。

1.4 OpenCV的下载、安装与配置

OpenCV3.4.1+visual studio 2017环境配置(永久配置版),CSDN上一堆堆,选个不错的吧~
https://blog.csdn.net/weixin_42836481/article/details/81358695

1.5 OpenCV图像处理

1.图像显示

#include<opencv2/opencv.hpp>
using namespace cv;int main()
{Mat img = imread("1.jpg");imshow("[载入的图片]", img);waitKey(6000);
}

2.图像腐蚀

#include<opencv2/highgui/highgui.hpp> //opencv highgui模块头文件
#include<opencv2/imgproc/imgproc.hpp> //opencv 图像处理头文件
using namespace cv;//包含cv命名空间int main()
{//载入原图Mat srcImage = imread("1.jpg");//显示原图imshow("[原图]腐蚀操作", srcImage);//进行腐蚀操作Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //函数返回指定形状和尺寸的结构元素(内核矩阵)Mat dstImage;erode(srcImage, dstImage, element);//显示效果图imshow("[效果图]腐蚀操作", dstImage);waitKey(0); //等待按键按下,以便让窗口一直显示return 0;
}

3.图像模糊

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{//[1]载入原始图Mat srcImage = imread("1.jpg");//[2]显示原始图imshow("均值滤波[原图]",srcImage);//[3]进行均值滤波操作Mat dstImage;blur(srcImage, dstImage, Size(7, 7));//[4]显示效果图imshow("均值滤波[效果图]", dstImage);//[5]等待键盘输入waitKey(0);
}

4.canny边缘检测

#include<opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;int main()
{//[0]载入原始图Mat srcImage = imread("2.jpg");//显示原始图imshow("[原始图]canny边缘检测",srcImage);//[1]创建与src同类型和大小的矩阵(dst)Mat dstImage, edge, grayImage;dstImage.create(srcImage.size(), srcImage.type());//[2]将原图像转换为灰度图像//此句代码的Opencv2版为://cvtColor(srcImage,grayImage,CV_BGR2GRAY);//此句代码的Opencv3版为:cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);//[3]先使用3*3内核来降噪blur(grayImage, edge, Size(3, 3));//[4]运行Canny算子Canny ( edge, edge, 3, 9, 3);//[5]显示效果图imshow("[效果图]canny边缘检测", edge);waitKey(0);return 0;
}

1.6 OpenCV视频操作基础

OpenCV视频操作,利用OpenCV中的VideoCapture类,对视频进行读取显示及调用摄像头

1.读取并播放视频

#include<opencv2/opencv.hpp>
using namespace cv;int main()
{//[1]读入视频//实例化并初始化VideoCapture//VideoCapture capture("1.avi");VideoCapture capture;capture.open("1.avi");//[2]循环显示视频的每一帧while (1){Mat frame; //定义一个Mat变量,用于存储每一帧的图像capture >> frame; //读取当前帧imshow("读取视频", frame); //显示当前帧waitKey(30); //延时30ms}return 0;
}

2.调用摄像头采集图像

 //利用VideoCapture类调用摄像头采集视频和从文件中读入视频的区别仅在于VideoCapture类对象初始化时指定的内容//即是指定文件“1.avi”还是填0表示摄像头#include<opencv2/opencv.hpp>
using namespace cv;int main()
{//[1]从摄像头读入视频VideoCapture capture(0);//[2]循环显示每一帧while (1){Mat frame; //定义一个Mat变量,用于存储每一帧的图像capture >> frame; //读取当前帧imshow("读取视频", frame); //显示当前帧waitKey(30); //延时30ms}return 0;
}

3.利用摄像头调用示例程序配合canny边缘检测,得到canny边缘检测并高斯模糊后的摄像头采集视频

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{//从摄像头读入视频VideoCapture capture(0);Mat edges;//循环显示每一帧while(1){//[1]读入图像Mat frame; //定义一个Mat变量,用于存储每一帧的图像capture >> frame; //读取当前帧//[2]将原图像转换为灰度图像cvtColor(frame, edges, COLOR_BGR2GRAY);//[3]用3*3内核来降噪(2*3+1=7)blur(edges, edges, Size(7, 7)); //进行模糊//[4]进行canny边缘检测Canny(edges, edges, 0, 30, 3);//[5]显示效果imshow("被canny后的视频", edges);  //显示经过处理后的当前帧if (waitKey(30) >= 0) break; //延时30ms}return 0;
}

《OpenCV3编程入门》学习笔记1 邂逅OpenCV相关推荐

  1. 原创 OpenCV3编程入门 学习笔记(总)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_36163358/article/ ...

  2. OpenCV3编程入门 学习笔记(总)

    OpenCV3编程入门 学习笔记 2018.12.12-2018.12.29 此博客为在看过毛星云版<OpenCV3编程入门>后所总结的一本笔记,可供复习使用. 文章目录 OpenCV3编 ...

  3. Opencv3编程入门学习笔记(五)之通道分离(split)与合并(merge)

    若要对Opencv中(BGR)颜色通道进行单一处理,那必然会涉及到通道分离(split)与合并(merge).那么本篇博客笔者记录了两个方法的使用方法和案例.案例来源于<Opencv3编程入门学 ...

  4. 【OpenCV3编程入门学习笔记】——第1章 邂逅OpenCV

    邂逅OpenCV 文章目录 邂逅OpenCV 前言 1.1 OpenCV周边概念认知 1.1.1 图像处理.计算机视觉与OpenCV 1.1.2 OpenCV概述 1.1.3 起源及发展 1.1.4 ...

  5. Opencv3编程入门学习笔记(三)之访问图像像素的三种方法

    访问图像像素的三种方法:指针访问,迭代器访问,动态地址访问.访问最快的为指针访问,以下算法在几毫秒,但指针访问容易造成内存泄漏:其次为迭代器访问:最后为动态地址访问. 以下程序是根据<OpenC ...

  6. Opencv3编程入门学习笔记(四)之split通道分离Debug过程中0xC0000005内存访问冲突问题

    这是笔者学习<Opencv3编程入门>的第四篇博客,这篇博客主要是解决在Windows系统下VS 2013中Debug含有split分离通道色彩函数时报出的0xC0000005内存访问冲突 ...

  7. 【OpenCV3编程入门学习笔记】——第3章 HighGUI图形用户界面初步

    文章目录 前言 3.1 图形的载入.显示和输出到文件 3.1.1 OpenCV的命名空间 3.1.2 Mat类简析 3.1.3 图像的载入与显示概述 3.1.4 图像的载入:imread()函数 3. ...

  8. Opencv3编程入门学习笔记(二)之显式创建Mat对象

    以下总结是基于<Opencv3编程入门>一书4.1节总结的内容进行验证与总结,验证环境均为Windows10 ---VS2013 C++环境,验证Opencv3.0提供的开发包. 1. 方 ...

  9. 01.Java 编程入门学习笔记20210307

    Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...

  10. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

最新文章

  1. 【OpenCV3】图像最大轮廓检测——cvFindBiggestContour()封装
  2. Vim试水之六:NerdTree插件安装
  3. ArrayList和LinkedList类的用法及区别
  4. AnnotationConfigApplicationContext ad has not been refreshed yet 错误
  5. big5码在线转换_【开源】基于 SpringBoot 的 web kettle 在线采集平台
  6. iPhone 14系列内部定价曝光:全版本或将涨价
  7. python编程技巧1002python编程技巧_总结Python编程中三条常用的技巧
  8. JAVA实现1到100的平方根之和_手算平方根和基于 Java BigInteger 的大整数平方根的实现...
  9. arcpy.mapping常用四大件-MapsurroundElement
  10. [Python] numpy库的简介和常用函数
  11. Masonry详解(转)
  12. 第十一次课:Python函数(二)
  13. Mysql常用内置函数
  14. 读书笔记-人月神话5
  15. 转专业选择计算机的理由,转专业面试自我介绍范文
  16. 学计算机的一定是好男人,心理学:只要满足3个条件,好男人也会学“坏”
  17. Unity Sunny Land开发流程(二)
  18. Java DateUtil 时间工具类
  19. Mysql统计男女比例
  20. icloud有linux客户端吗,Windows 版 iCloud 客户端如何下载?iCloud Drive 如何在 PC 使用?...

热门文章

  1. python内置库之学习ctypes库(一)
  2. 【微服务架构】SpringCloud之Eureka入门篇
  3. nn.moduleList 和Sequential由来、用法和实例 —— 写网络模型
  4. tf.variable_scope 参数
  5. 使用现代C++如何避免bugs(下)
  6. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理
  7. 【CV】吴恩达机器学习课程笔记 | 第1-15章
  8. TypeError: ord() expected string of length 1, but int found
  9. python 取list 里面最大的数或者最小数
  10. 查看Ubuntu 系统的版本