您的位置:首页 > 运维架构

OpenCV结构简介

2015-03-09 18:52 197 查看
前言

OpenCV的全称是:Open Source Computer Vision Library。它是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV是一个工具库(一个现成的工具),你可以运用它省去很多底层实现,直接基于它进行开发。 俗话说的好:工欲善其事,必先利其器。要想运用得当,必须了解OpenCV能够提供的功能和提供的好坏。本文主要介绍OpenCV的主要功能结构及其运用。

正文

OpenCV主要的类包括Point_,Point3_,Size_,Vec,Matx,Scalar,Rect,Range,Mat。它们是平行的层级。

Point_表示2D的点,Point3_表示3D的点;Mat/Matx分别是 二维或者多维的数组,可以表示矩阵,图像等,Size_用于定义一定长度和宽度的结构;Vec用于定义一个容量比较小的向量,类似于C++ 标准库中的std::Vector;Scalar是四个元素的向量;Rect是矩形的缩写;Range用于定义一个整型的范围;此外还有SparseMat是多维稀疏矩阵类;Ptr为智能指针类,这个指针相当于C++中的std::tr1::shared_ptr。

需要指出的是以上结构中Point_,Point3_,Size_,Vec,Matx,Ptr都是模板类。

比较重要的是Mat类,因为OpenCV主要是用于图像处理或者视频处理的工具库,这都要用到Mat类,或者其相关类。

1. 构造Matrix的方法

a. Mat image(240, 320, CV_8UC3); 指定长宽和图像类型的构造方法;

b. Mat A33(3, 3, CV_32F, Scalar(5)); double a = CV_PI/3; Mat A22 = (Mat_<float>(2, 2) cos(a), -sin(a), sin(a), cos(a)); 同时指定每个像素的值为常量和特定值的构造方法;

c. 从其它类型构造矩阵,如将image赋值给矩阵,Mat IMat = imread(”path”)

2. 操作Matrix的方法

a. 取特定像素的值:Mat.at<T >(i, j),其中T代表每个像素的数值类型,i和j唯一确定了相应位置。

b. 取得子矩阵:m(Range(i1,i2),Range(j1,j2))

c. 放大矩阵:m.repeat(ny,nx)

d. 分拆多通道矩阵为多个单通道:split(...)

e. 将多个单通道矩阵融合为单个多通道矩阵:merge(...)

还有一些统计学函数和单纯代数加减函数等,这里就不介绍了。

3. 图像处理相关

包含滤波,空间转换,各种其他的转换,直方图,等值线等相关的功能。

4. 展示图像相关

创建一个窗口:namedWindow (winName, flag )

消除一个窗口:destroyWindow (winName )

展示一个窗口:imshow (winName,Image )

暂停等待用户:waitKey ( )

总结

OpenCV为用户提供了很多方便的函数,了解了提供了那些函数和相应用法,才能用OpenCV做出好的应用。其中比较重要的是Mat类,和ImageProcessing模块,highGUI模块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: