opencv3学习笔记(一)

*opencv可解决如下领域的问题:人机交互;物体识别;图像分区;人脸识别;动作识别;运动跟踪;机器人

*OpenCV2文件夹(....\opencv\build\include\opencv2目录下功能模块):

【calib3d】-----校准跟3D这两个词的组合缩写。这个模块主要是相机校准和三维重建相关的内容,包括基本的多视角几何算法、单位立体摄像头标定、物体姿态估计、立体相似性算法、3D信息的重建等。

【core】------核心功能模块,包含内容:OpenCV基本数据结构;动态数据结构;绘图函数;数组操作相关函数;辅助函数与系统函数和宏;与OpenGL的互操作

【gpu】-------运用GPU加速的计算机视觉模块

【highgui】-------高层GUI图形用户界面,包含媒体的输入、视频捕捉、图像和视频的编码解码、图形交互界面的借口等内容。

【ml】------机器学习模块,基本上是统计模型和分类算法:统计模型;一般贝叶斯分类器;k-邻近;支持向量机;决策树;提升;梯度提高树;随机树;超随机树;期望最大化;神经网络;MLData

【ocl】-------运用OpenCV加速的计算机视觉组件模块

【photo】------包含图像修复和图像去噪两部分

【stitching】-----图像拼接技术:拼接流水线;特点寻找和匹配图像;估计旋转;自动校正;图片歪斜;接缝估测;曝光补偿;图片混合

【video】-----视频分析组件,该模块包括运动估计、背景分离、对象跟踪等视频处理相关内容。

*opencv3的一些需要注意的改动(http://code.opencv.org/projects/opencv/wiki/ChangeLog):

       ①vector包含在using namespace std;中

       ②#include --------->#include

          #include ------->#include

      ③format格式化输出时:format(r,"python");------->format(r,Formatter::FMT_PYTHON);

      ④定义尺寸cvSize(-1,-1);-------->Size(-1,-1);

      ⑤表示颜色cv_RGB----->Scalar

*关于配置

操作系统32位配x86;操作系统64位配x64。无论怎没配只要运行环境跟配置的一直就不会有啥大问题。

vc15表示visual stdio2017

vc12表示visual stdio2010

vc13表示visual stdio2013

vc14表示visual stdio2015........以此类推

配置的时候选跟自己所安装的软件版本一直的就行。

配置步骤一:

        计算机-----属性---高级系统设置----高级-----环境变量----系统变量----找到path----编辑----添加自己的安装路径如D:\OpenCV\opencv\build\x64\vc15\bin;D:\opencv-2.4.11\opencv\build\x64\vc12\lib配置多个用分号隔开。

配置步骤二:

       项目属性:VC++目录: 

       ①包含目录:  D:\OpenCV\opencv\build\include

D:\OpenCV\opencv\build\include\opencv

D:\OpenCV\opencv\build\include\opencv2

                       ②库目录:D:\OpenCV\opencv\build\x64\vc15\lib

链接器:         ①常规:附加库目录D:\OpenCV\opencv\build\x64\vc15\lib

                       ②输入:opencv_world341.lib;opencv_world341d.lib(Debug:带d。Release:不带d)

若报错找不到dll文件,将其赋值----粘贴到c://windows/SysWOW64下:xxxx.dll

(32位的粘贴到c://windows/system下:xxxx.dll)

*常见错误

                 LNK2005:xxxx:不包含静态库

                 无法正常启动0xc00007b:Lib包含问题

                 sorbs......   :载入路径错误(指针越界、未处理异常)

                 无法打开文件“opencv_ml341(版本号)d.lib”系列错误:LNK1104:库目录与附加依赖不相互对

*main()函数形参

argc与argv参数    int main(int argc,char**argv,char**env(可无)){ ....}                                                           

①arg指的是“参数”;

②argc为整数,用来统计运行程序时送给main函数的命令行参数的个数,visual stdio中默认为1;

③*argv[]为字符串数组,用来存放指向字符串参数的指针数组,每一个元素指向一个参数。

argv[0] 指向程序运行的全部路径名

argv[1] 指向在DOS命令行中执行程序名后的第一个字符串:项目属性----配置属性-----调试---命令参数  , 中的值。(带双引号,多个参数分别“1.jpg”“2.jpg”中间用空格隔开)

argv[2] 指向执行程序名后的第二个字符串

argv[3] 指向执行程序名后的第三个字符串

argv[argc] 为NULL

 这两个参数一般在用命令行编译程序的时候有用。

//---------第一个程序:显示图像----------

#include

using namespace cv;//包含cv命名空间



int main() {

Mat srcImage=imread("1.jpg");//载入图像

imshow("原图",srcImage);             //显示图像

waitKey(0);                          //等待任意按键按下

}

//---------第二个程序:图像腐蚀(形态学运算)----------

//用图像中的暗色部分腐蚀掉图像中的高量部分

#include //opencv highgui模块头文件

#include //opencv图像处理头文件

using namespace cv;



int main() {

//显示图像

Mat srcImage = imread("1.jpg");

imshow("【原图】",srcImage);



//进行腐蚀操作

Mat element = getStructuringElement(MORPH_RECT,Size(3,3));

      //getStructuringElement函数的返回值为指针形状和尺寸的结构元素(内核矩阵)

Mat dstImage;

erode(srcImage,dstImage,element);

     //erode为腐蚀函数

//显示效果图

imshow("【腐蚀图】",dstImage);

waitKey(0);

return 0;

}

//---------第三个程序:图像模糊--用于降噪(均值滤波操作blur)----------

#include //opencv highgui模块头文件

#include //opencv图像处理头文件

using namespace cv;



int main() {

//载入原图

Mat srcImage = imread("1.jpg");

imshow("【原图】", srcImage);



//进行均值滤波操作

    Mat dstImage;

blur(srcImage, dstImage,Size(7,7));

//显示效果图

imshow("【均值滤波】", dstImage);

waitKey(0);

return 0;

}

//---------第四个程序:canny边缘检测----------

#include //opencv highgui模块头文件

#include //opencv图像处理头文件

using namespace cv;



int main() {

//载入原图

Mat srcImage = imread("1.jpg");

imshow("【原图】", srcImage);

Mat dstImage, edge, grayImage;



//创建一个与src同类型和大小的矩阵(dst)

dstImage.create(srcImage.size(),srcImage.type());



//将原图像转换为灰度图像

//cvtColor(srcImage,GrayImage,CV_BGR2GRAY);//opencv2版本

cvtColor(srcImage, grayImage,COLOR_BGR2GRAY);//opencv3版本

   //使用3*3内核降噪

blur(grayImage,edge,Size(3,3));

//运行canny算子

Canny(edge,edge,3,9,3);

//显示效果图

imshow("【Canny边缘检测】", edge);

waitKey(0);

return 0;

}

//---------第六个程序:读取视频----------

#include

using namespace cv;



//用videoCapture类对视频进行读取显示,以及调用摄像头

int main() {

//初始化

VideoCapture capture("1.wmv");



//循环显示每一帧:

while(1){

Mat frame;//定义一个Mat变量,用于存储每一帧的图像

capture >> frame;//读取当前帧

imshow("读取视频",frame);//显示当前帧

waitKey(30);//延时30ms

}

return 0;

}

//---------第七个程序:调用摄像头采集图像+canny边缘检测----------

#include

using namespace cv;



//用videoCapture类对视频进行读取显示,以及调用摄像头

int main() {

//初始化

VideoCapture capture(0);//参数0表示读取摄像头

Mat edges;

//循环显示每一帧:

while (1) {

Mat frame;//定义一个Mat变量,用于存储每一帧的图像

capture >> frame;//读取当前帧



//将原图像转换为灰度图像

cvtColor(frame, edges, COLOR_BGR2GRAY);//opencv3版本



        //使用3*3内核降噪(2*3+1=7)

blur(edges, edges, Size(7, 7));//进行模糊



//运行canny算子

Canny(edges, edges, 0, 30, 3);



imshow("读取视频canny后", edges);//显示当前帧

if (waitKey(30)>= 0)break;//延时30ms

}

return 0;

}


 

猜你喜欢

转载自blog.csdn.net/qq_37894023/article/details/84425125