第一部分:快速上手OPENCV,包括前三章

目录

第一章、认识OpenCV

1.1、周边概念认知

1.2、基本架构分析

1.3、常见异常

一、由于宏名称的变更造成的“未声明的标识符”:

二、使用vector容器时提示“error C2065:"vector":未声明的标识符”系列错误

三、其他问题解决方案

1.4、安装

1.5、上手opencv


第一章、认识OpenCV

  • 1.1、周边概念认知

  • 1.2、基本架构分析

    • 【calib3d】----相机校准和三维重建相关内容,包括基本的多视角几何算法、单个立体摄像头标定、物体姿态估计、立体相似性算法、3D信息重建。
    • 【contrib】----新增了新型人脸识别、立体匹配、人工视网膜模型等技术
    • 【core】----核心功能
      • OpenCV基本数据结构
      • 动态数据结构
      • 绘图函数
      • 数组操作相关函数
      • 辅助功能与系统函数和宏
      • 与OpenGL的互操作
    • 【imgproc】----图像处理模块
      • 线性和非线性的图像滤波
      • 图像的几何变换
      • 其他图像变换
      • 直方图相关
      • 结构分析和形状描述
      • 运动分析和对象跟踪
      • 特征检测
      • 目标检测等
    • 【features2d】----2D功能模块
      • 特征检测和描述
      • 特征检测器通用接口
      • 描述符提取器通用接口
      • 描述符匹配器通用接口
      • 通用描述符匹配器通用接口
      • 关键点绘制函数和匹配功能绘制函数
    • 【flam】----高危的近似近邻快速搜索算法库
      • 快速近似最近邻搜索
      • 聚类
    • 【gpu】----运用GPU加速的计算机视觉模块
    • 【highgui】----高层GUI图像用户界面,包含媒体的输入输出、视频捕捉、图像和视频的编码解码、图像交互界面的接口
    • 【legacy】----一些已经废弃的代码库,向下兼容
      • 运动分析
      • 期望最大化
      • 直方图
      • 平面细分
      • 特征检测和描述
      • 描述符提取器
      • 通用描述符
      • 匹配器
    • 【ml】----机器学习模块
      • 统计模型
      • 一般贝叶斯分类器
      • K-近邻
      • 支持向量机
      • 决策树
      • 提升
      • 梯度提高树
      • 随机树
      • 超随机树
      • 期望最大化
      • 神经网络
      • MLData
    • 【nonfree】----一些具有专利的算法模块,包含特征检测和GPU相关的内容,不要商用
    • 【objdetect】----目标检测模块,级联分类和Latent SVM
    • 【ocl】----运用OpenCL加速的计算机视觉组件模块
    • 【photo】----图像修复和图像去噪
    • 【stitching】----图像拼接模块
      • 拼接流水线
      • 特点寻找和匹配图像
      • 估计旋转
      • 自动校准
      • 图片歪斜
      • 接缝估测
      • 曝光补偿
      • 图片混合
    • 【superres】----超分辨率技术的相关功能
    • 【ts】----测试相关代码,不用去管
    • 【video】----视频分析组件,包括运动估计、背景分离、对象跟踪等视频处理相关内容
    • 【videostab】----视频稳定相关的组件,不用管
  • 1.3、常见异常

    • opencv3加入了一个名为opencvcontrib的仓库,脸部识别、文本检测、文本识别、新的边缘检测器、图像修复、深度地图处理、新的光流和追踪算法
    • opencv2到opencv3代码升级的错误
      • 一、由于宏名称的变更造成的“未声明的标识符”:

        • 有时候可以加一句"#include<cv.h>"。
        • 症状:error C2065:'CVWIDOWAUTOSIZE':未声明的标识符系列错误。
        • 分析:opencv3取消了opencv1中残留的CV,式的宏前缀命名规范,有几种情况讨论
          • 1、直接去掉:CV前缀
            • namedWindow函数中,将CVWINDOWAUTOSIZE改为WINDOWAUTOSIZE
            • threshold函数中,将CVTHRESHBINARY 改为THRESHBINARY
            • line函数等一系列绘图函数中,CVFILLED改为FILLED
            • remap函数中。CVINTERLINEAR改为INTERLINEAR
            • 在鼠标操作函数SetMouseCallback中,将CVEVENTLBUTTONUP改为EVENTLBUTTONUP、CVEVENTLBUTTONDOWN 改为 EVENTLBUTTONDOWN、CVEVENTFLAGLBUTTON改为EVENTFLAGLBUTTON、CVEVENTMOUSEMOVE改为EVENTMOUSEMOVE
            • HoughCircles函数中,将CVINPAINTTELEA改为INPAINTTELEA、CVINPAINTNS写作INPAINTNS
            • inpaint函数中,将 CVINPAINTTELEA改为 INPAINTTELEA、CVINPAINTNS写作 INPAINTNS。
            • 9) matchTemplate函数中,将CVTMSQDIFF改为TMSQDIFF、CVTMSQDIFFNORMED改为TMSQDIFFNORMED。
            • 10)在imwrite函数相关使用中,将CVIMWRITEPNGCOMPRESSION改成IMWRITEPNGCOMPRESSION。
            • 11)设置摄像头尺寸的时候,将 CVCAPPROPFRAMEWIDTH 改为CAPPROPFRAMEWIDTH、CVCAPPROPFRAMEHEIGHT改为CAPPROP FRAME HEIGHT。
          • 2、需要使用新的前缀替换
            • 1) line函数等一系列绘图函数中,CVAA改为LINEAA
            • 2 ) cvtColor函数中颜色空间转换系的宏,全替换为“COLOR”前缀,如CVBGR2HSV 改为COLORBGR2HSV
            • 3)normalize函数中,将CV MINMAX改为NORMMINMAX。
            • 4) morphologyEx函数中的宏,全部替换为“MORPH”前缀,如CVMOPOPEN改为MORPHOPEN。
            • 5 ) threshold 函数中的宏,全部替换为“THRESH”前缀,如将CVTHRESHBINARY 改THRESH BINARY
          • 3、需要在新的命名空间中使用宏
            • 1) TermCriteria函数中,CVTERMCRITEPS 改为TermCriteriaEPS、CVTERMCRITITER改为TermCriteria:MAXITER
            • 2) CascadeClassifier.:.detectMultiScale函数中,CVHAARSCALEIMAGE改为CASCADESCALEIMAGE。
      • 二、使用vector容器时提示“error C2065:"vector":未声明的标识符”系列错误

        • 症状:在opencv3的环境下运行opencv2的程序,使用了vector容器,而未包含STD命名空间,于是会报此错误
        • 分析:opencv3中并没有在头文件使用标准程序库std的命名空间。在开头加一句"using namespace std"
      • 三、其他问题解决方案

        • 1)features2d. hpp头文件路径的更改。将#include <opencv2/nonfree/features2d.hpp>改为#include<opencv2/features2d.hpp>
        • 2) core.hpp头文件路径更改。将#include<opencv2/core/core.hpp>改为#include<opencv2/core.hpp>
        • 3)用format进行格式化输出时,将 format(r,"python")改成format(r,FormatterFMTPYTHON)。
        • 4)定义尺寸时,将cvSize(-1,-1)改为Size(-1,-1)。
        • 5)在表示颜色时,将CVRGB改为Scalar。
  • 1.4、安装

    • 运行测试代码可能遇到的问题
      • 找不到core.hinclude的时候包含错误
      • 无法解析的外部命令编译器和配置文件要一致
      • 形如--error LNK2005:xxx已经在msvcrtd.lib(MSVCR9OD.dIl)中定义把静态库不包含就好了
      • 应用程序无法正常启动0xc000007b这是Lib包含的问题
      • 图片路径是对的加载不出来,指针越界,有未经处理的异常是lib文件带d和不带d的附加依赖项的问题,
      • 无法打开文件“opencvml249d.lib”系列的错误包含的库目录和附加依赖项不能相互对应造成的
    • 修改包含目录
      • D:\opencv3\opencv\build\include
        D:\opencv3\opencv\build\include\opencv
        D:\opencv3\opencv\build\include\opencv2
    • 修改库目录
      • D:\opencv3\opencv\build\x64\vc14\lib
    • 修改附加依赖项
      • opencv安装目录下build\x64\vc14\lib文件夹下的opencv_world346d.lib
  • 1.5、上手opencv

    • 图像显示
      • #include<opencv2/opencv.hpp>
        #include<iostream>
        using namespace cv;
        int main(int argc, char** argv)
        {
        	Mat src = imread("D:/photo/1.png");
        	if (src.empty())
        	{
        		printf("没有读取到图片。");
        		return -1;
        	}
        	namedWindow("测试opencv", CV_WINDOW_AUTOSIZE);
        	imshow("测试opencv", src);
        	waitKey(0);
        	return 0;
        }

    • 图像腐蚀
      • #include<opencv2/opencv.hpp>//模块头文件
        #include<opencv2/imgproc/imgproc.hpp>//图像处理头文件
        using namespace cv;
        int main()
        {
        	Mat srcImage = imread("D:/photo/2.png");
        	imshow("【原图】腐蚀操作", srcImage);
        	//进行腐蚀操作
        	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
        	Mat dstImage;
        	erode(srcImage, dstImage, element);
        	imshow("【效果图】", dstImage);
        	waitKey(0);
        	return 0;
        
        }

    • 图像模糊
      • #include"opencv2/highgui/highgui.hpp"
        #include"opencv2/imgproc/imgproc.hpp"
        using namespace cv;
        int main()
        {
        	Mat srcImage = imread("D:/photo/2.png");
        	imshow("【原图】均值滤波", srcImage);
        	//进行模糊操作
        	
        	Mat dstImage;
        	blur(srcImage, dstImage, Size(7,7));
        	imshow("【效果图】", dstImage);
        	waitKey(0);
        	return 0;
        
        }

    • canny边缘检测
      • #include<opencv2/opencv.hpp>//模块头文件
        #include<opencv2/imgproc/imgproc.hpp>//图像处理头文件
        using namespace cv;
        int main()
        {
        	Mat srcImage = imread("D:/photo/5.png");
        	imshow("【原图】canny边缘检测", srcImage);
        	Mat dstImage, edge, grayImage;//参数定义
        
        	//1、创建与src同类型和大小的矩阵(dst)
        	dstImage.create(srcImage.size(), srcImage.type());
        
        	//2、将原图转换为灰度图
        	cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
        
        	//3、先使用3x3内核来降噪
        	blur(grayImage, edge, Size(3, 3));
        
        	//4、运行canny算子
        	Canny(edge, edge, 3, 9, 3);
        
        	//5、显示效果图
        	imshow("【效果图】canny边缘 检测", edge);
        
        	
        	waitKey(0);
        	return 0;
        
        }

  • 1.6、视频操作基础
    • 读取并播放视频
      • #include<opencv2/opencv.hpp>
        using namespace cv;
        int main()
        {
        	VideoCapture capture("D:/photo/1.mp4");
        
        	//循环显示每一帧
        	while (1)
        	{
        		Mat frame;//定义一个mat变量,用于存储每一帧的图像
        		capture >> frame;//读取当前帧
        		imshow("读取视频", frame);
        		waitKey(30);//延时30ms
        	}
        	return 0;
        }

    • 调用摄像头采集图像
      • #include<opencv2/opencv.hpp>
        using namespace cv;
        
        int main()
        {
        	//从摄像头读入视频
        	VideoCapture capture(0);
        
        	//循环显示每一帧
        	while (1)
        	{
        		Mat frame; //定义一个Mat变量,用于存储每一帧的图像
        		capture >> frame;//读取当前帧
        		imshow("读取视频", frame);//显示当前帧
        		waitKey(30);
        	}
        	return 0;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值