《OpenCV3编程入门》学习笔记1 邂逅OpenCV

第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
using namespace cv;

int main()
{
	Mat img = imread("1.jpg");
	imshow("[载入的图片]", img);
	waitKey(6000);
}

2.图像腐蚀

#include //opencv highgui模块头文件
#include //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
#include
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
#include
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
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
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
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;
}

你可能感兴趣的:(OpenCV)