/ 没事折腾

opencv学习笔记——Robert膝盖

这篇文章的阅读量为

进入学习计算机视觉的世界♂

此学习笔记主要从毛星云的书籍和csdn博客上的文章等进行总结,并且追加本人理解和学习心得,形成一个对萌新一万分友好的类似于笔记小结的文章,用于查用和构筑学习框架。

什么是Computer Vision(计算机视觉)

扫一眼百度百科:

扫一眼就好了

个人认为计算机视觉是一种分析图像的领域通过图像获得数据并加以运用,就是计算机视觉。计算机视觉作为一个庞大而富有潜力的领域,包含了多学科知识。从统计学,计算机科学,概率论到生物,摄像等。本人作为学生仅窥探了这些学科中非常浅显的一角,所以在笔记中本人将会记录下相应必要背景知识(同时学习)。

opencv环境搭建

在进行opencv的环境配置中,一般采用visual studio或者sublime配合cmake作为工作环境。 sublime配置方法: http://blog.csdn.net/qq_36430621/article/details/71080799 visual studio配置方法: http://blog.csdn.net/poem_qianmo/article/details/19809337 ##需要注意的是,使用VS一定要对应好opencv文件夹内的版本号,比如opencv3.2中的vc14并不能在VS2014以前的版本中使用。 同时,VS2010以上版本编译是可能出现winbug x32过期啥啥无法编译的情况,本人百度得知是VS每次编译自动检索文件完整性,但有个文件好像缺失导致编译不能(其实文件与编译无关)。具体细节与解决方案百度即可。

opencv命名空间

c++中存在命名空间这一东西。命名空间的出现有效的解决了不同库下同名函数的纠结。

namespace namespace_name {

// 代码声明

}

在调用有命名空间的函数或者变量的时候

name::code; // code 可以是变量或函数

可以使用以上格式。

在opencv中,我们使用cv::mat调用函数。觉得麻烦每次都要敲的话,可以在main前加入using namespace cv;

mat型

cv::Mat类是用于保存图像以及其他矩阵数据的数据结构。储存图像我们一般使用二维矩阵。

对于灰度的矩阵数据:

对于RGB图像的矩阵数据:

图源于lhanchao的csdn博客

基础函数摘要

(本节函数介绍大部分总结自毛星云csdn)

在opencv3中,图像载入和显示只需要三个函数: imread( ) namedWindow( ) imshow( )

imshow

函数原型: Mat imread(const string& filename, intflags=1 ) const string& filename: 要载入的图片路径名 intflags=1: 默认值为1,载入三通道的彩色图像(RGB)

在intflags中数字变量含义:

CV_LOAD_IMAGE_GRAYSCALE  =0,  //8bit, gray 0代表八字节灰度图,始终将图像转换成灰度1

/* ?, color /
CV_LOAD_IMAGE_COLOR      =1, //总是转换图像到彩色一体
/ any depth, ? /
CV_LOAD_IMAGE_ANYDEPTH   =2, //若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回
/ ?, any color */
CV_LOAD_IMAGE_ANYCOLOR   =4

如果想要载入最真实的图像,选择CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR。

总结:

  • flags >0返回一个3通道的彩色图像。
  • flags =0返回灰度图像。
  • flags <0返回包含Alpha通道的加载的图像。