OpenCV学习笔记(一)——组件与图像的载入

1.OpenCV3.4.1的组件

打开:……\opencv\build\include\opencv2文件夹中的opencv_modules.hpp文件;
就可以看到对各个功能模块的定义:
OpenCV学习笔记(一)——组件与图像的载入_第1张图片
(1)CALIB3D:摄像机标定与三维重建(Camera Calibration and 3D Reconstruction);主要是相机校准和三维重建相关的内容。
(2)CORE:定义了Opencv最为基础的数据结构;包括:OpenCV基本数据结构、动态数据结构、绘图函数、数组操作相关函数、辅助功能与系统函数和宏、与OpenGL的互操作等等。
(3)FEATURES2D:2D特征描述符,描述符匹配器和探测器;包括:特征检测和描述、特征检测器(Feature Detectors)通用接口、描述符提取器(Descriptor Extractors)通用接口、描述符匹配器(Descriptor Matchers)通用接口、通用描述符(Generic Descriptor)匹配器通用接口、关键点绘制函数和匹配功能绘制函数等等。
(4)FLANN:高维的近似近邻快速搜索算法库(Fast Library for Approximate Nearest Neighbors);包括:快速近似最近邻搜索、聚类。
(5)HIGHGUI:高层级的用户交互以及媒体的IO接口(High-level GUI and Media I/O )包括:用户交互(显示图片,窗口的操作,鼠标的操作)、读写图片或者视频、Qt新功能。
(6)IMGCODECS:用于图片的读写。
(7)IMGPROC:用于图片处理;包括:图像滤波(Image Filtering)、图像的几何变换(Geometric Image Transformations)、各种图片形式的转换(Miscellaneous Image Transformations)、直方图(Histograms )、结构分析和形状描述(Structural Analysis and Shape Descriptors)、动作分析以及物体追踪(Motion Analysis and Object Tracking)、特征检测(Feature Detection)、绘画的功能(Drawing Functions)、给灰度图重新上色(ColorMaps in OpenCV )、平面细分(Planar Subdivision )、C API 、Hardware Acceleration Layer等等。
(8)ML:Machine Learning机器学习模块;基本就是统计学上回归,分类以及聚类;包括:统计模型Statistical Models 、一般贝叶斯分类器Normal Bayes Classifier 、K-近邻K-Nearest Neighbors 、支持向量机SVM Support Vector Machines、决策树Decision Trees 、级联分类器Boosting 、梯度树Gradient Boosted Trees 、随机树Random Trees 、超随机树Extremely randomized trees 、期望最大化Expectation Maximization 、神经网络Neural Networks 、机器学习数据的形式相关MLData等等。
(9)OBJDETECT:物体检测;采用的方法为:Haar Feature-based Cascade Classifier for Object Detection。
(10)PHOTO:图像降噪克隆与NPR渲染;包括:图像修复Inpainting、图像降噪Denoising、高范围动态成像HDR imaging、无缝克隆Seamless Cloning 等等。
(11)SHAPE:形状的匹配以及距离计算。
(12)STITCHING:图像拼接。
(13)SUPERRES:Super Resolution,包含了一系列的超分辨率问题的处理方法 。
(14)VIDEO:Video Analysis视频分析;包括:动作分析Motion Analysis、.物体追踪Object Tracking。
(15)VIDEOIO:用来读写视频的模块。
(16)VIDEOSTAB:Video Stabilization视频稳定模块;包括:全局运动估计Global Motion Estimation 、快速步进法Fast Marching Method。
(17)WORLD:打包,把所有东西打包在一个dll里面,方便环境配置。

2.OpenCV的命名空间

OpenCV中的C++类和函数都是定义在命名空间cv之内的。
在代码开头的适当位置,加上using namespace cv;

3.Mat类型

用于保存图像以及其他矩阵数据的数据结构。默认情况下,其尺寸为0,我们也可以指定初始尺寸,如,定义一个Mat类对象,cv::Mat pic(320,640,cv::Scalar(0));

4.图像的载入和显示

(1)imread函数:
Mat imread(const string& filename, int flags=1 );
参数filename: 需要载入的图片路径名。
参数flags: 载入标识,它指定一个加载图像的颜色类型;默认值为1(CV_LOAD_IMAGE_COLOR)总是转换图像到彩色一体。
(2)namedWindow函数:
函数作用:通过指定的名字,创建一个可以作为图像和进度条的容器窗口。如果具有相同名称的窗口已经存在,则函数不做任何事情。
我们可以调用destroyWindow()或者destroyAllWindows()函数来关闭窗口,并取消之前分配的与窗口相关的所有内存空间;但对于代码量不大的简单小程序来说,我们完全没有必要手动调用上述的destroyWindow()或者destroyAllWindows()函数,因为在退出时,所有的资源和应用程序的窗口会被操作系统会自动关闭。
void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );
参数name: 被用作窗口的标识符的窗口名称;
参数flags: 窗口的标识;WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制);WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小;WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

(3)imshow函数:
函数作用:用于在指定的窗口中显示图像。如果窗口是用CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么显示图像原始大小。否则,将图像进行缩放以适合窗口。
图像的缩放:取决于图像的深度。(1)如果载入的图像是8位无符号类型(8-bit unsigned),就显示图像本来的样子。(2)如果图像是16位无符号类型(16-bit unsigned)或32位整型(32-bit integer),便用像素值除以256。也就是说,值的范围是[0,255 x 256]映射到[0,255]。(3)如果图像是32位浮点型(32-bit floating-point),像素值便要乘以255。也就是说,该值的范围是[0,1]映射到[0,255]。
void imshow(const string& winname, InputArray mat);
参数winname: 需要显示的窗口标识名称;
参数mat: 需要显示的图像;InputArray是一种类型,简单地可看作Mat类型。

(4)imwrite函数
bool imwrite(const string& filename,InputArray img, const vector& params=vector() );
参数filename: 需要写入的文件名加后缀,如,“123.jpg”;
参数img: 一个Mat类型的图像数据;
参数params: 特定格式保存的参数编码,具有默认值。对于不同的图片格式有不同的含义:(1)JPEG格式:表示从0到100的图片质量(CV_IMWRITE_JPEG_QUALITY),默认值是95。(2)PNG格式:表示压缩级别(CV_IMWRITE_PNG_COMPRESSION)从0到9。较高的值意味着更小的尺寸和更长的压缩时间,而默认值是3。(3)PPM、PGM或PBM格式:表示一个二进制格式标志(CV_IMWRITE_PXM_BINARY),取值为0或1,而默认值是1。
函数作用:imwrite函数用于将图像保存到指定的文件。图像格式是基于文件扩展名的。

5.Mat图像的深度

1.图像的深度反应出图像颜色像素值:
图像的缩放:取决于图像的深度
(1)如果载入的图像是8位无符号类型(8-bit unsigned),就显示图像本来的样子。
(2)如果图像是16位无符号类型(16-bit unsigned)或32位整型(32-bit integer),便用像素值除以256。也就是说,值的范围是[0,255 x 256]映射到[0,255]。
(3)如果图像是32位浮点型(32-bit floating-point),像素值便要乘以255。也就是说,该值的范围是[0,1]映射到[0,255]。
2.Mat数据的存储:
Mat_对应的是CV_8U;
Mat_对应的是CV_8S;
Mat_对应的是CV_32S;
Mat_对应的是CV_32F;
Mat_对应的是CV_64F;对应的数据深度如下:
• CV_8U - 8-bit unsigned integers ( 0…255 )
• CV_8S - 8-bit signed integers ( -128…127 )
• CV_16U - 16-bit unsigned integers ( 0…65535 )
• CV_16S - 16-bit signed integers ( -32768…32767 )
• CV_32S - 32-bit signed integers ( -2147483648…2147483647 )
• CV_32F - 32-bit floating-point numbers ( -FLT_MAX…FLT_MAX, INF, NAN )
• CV_64F - 64-bit floating-point numbers ( -DBL_MAX…DBL_MAX, INF, NAN )

你可能感兴趣的:(计算机视觉CV)