opencv应用函数

opencv应用函数
opencv应用函数

目录

1 一、简介

1.1 1、OpenCV的特点

1.1.1 (1)总体描述

1.1.2 (2)功能

1.1.3 (3)OpenCV模块

1.2 2、有用的学习资源

1.2.1 (1)参考手册:

1.2.2 (2)网络资源:

1.2.3 (3)书籍:

1.2.4 (4)视频处理例程(在/samples/c/):

1.2.5 (5)图像处理例程(在/samples/c/): 1.3 3、OpenCV 命名规则

1.3.1 (1)函数名:

1.3.2 (2)矩阵数据类型:

1.3.3 (3)图像数据类型:

1.3.4 (4)头文件:

1.4 4、编译建议

1.4.1 (1)Linux:

1.4.2 (2)Windows:

1.5 5、C例程

2 二、GUI 指令

2.1 1、窗口管理

2.1.1 (1)创建和定位一个新窗口:

2.1.2 (2)载入图像:

2.1.3 (3)显示图像:

2.1.4 (4)关闭窗口:

2.1.5 (5)改变窗口大小:

2.2 2、输入处理

2.2.1 (1)处理鼠标事件:

2.2.2 (2)处理键盘事件:

2.2.3 (3)处理滑动条事件:

3 三、OpenCV的基本数据结构

3.1 1、图像数据结构

3.1.1 (1)IPL 图像:

3.2 2、矩阵与向量

3.2.1 (1)矩阵:

3.2.2 (2)一般矩阵:

3.2.3 (3)标量:

3.3 3、其它结构类型

3.3.1 (1)点:

3.3.2 (2)矩形框大小(以像素为精度):

3.3.3 (3)矩形框的偏置和大小:

4 四、图像处理

4.1 1、图像的内存分配与释放

4.1.1 (1)分配内存给一幅新图像:

4.1.2 (2)释放图像:

4.1.3 (3)复制图像:

4.1.4 (4)设置/获取感兴趣区域ROI:

4.1.5 (5)设置/获取感兴趣通道COI:

4.2 2、图像读写

4.2.1 (1)从文件中读入图像:

4.2.2 (2)保存图像:

4.3 3、访问图像像素

4.3.1 (1)假设你要访问第k通道、第i行、第j列的像素。

4.3.2 (2)间接访问: (通用,但效率低,可访问任意格式的图像)

4.3.3 (3)直接访问: (效率高,但容易出错)

4.3.4 (4)基于指针的直接访问: (简单高效)

4.3.5 (5)基于c++ wrapper 的直接访问: (更简单高效)

4.4 4、图像转换

4.4.1 (1)字节型图像的灰度-彩色转换:

4.4.2 (2)彩色图像->灰度图像:

4.4.3 (3)不同彩色空间之间的转换:

4.5 5、绘图指令

4.5.1 (1)绘制矩形:

4.5.2 (2)绘制圆形:

4.5.3 (3)绘制线段:

4.5.4 (4)绘制一组线段:

4.5.5 (5)绘制一组填充颜色的多边形:

4.5.6 (6)文本标注:

5 五、矩阵处理

5.1 1、矩阵的内存分配与释放

5.1.1 (1)总体上:

5.1.2 (2)为新矩阵分配内存:

5.1.3 (3)释放矩阵内存:

5.1.4 (4)复制矩阵:

5.1.5 (5)初始化矩阵:

5.1.6 (6)初始化矩阵为单位矩阵:

5.2 2、访问矩阵元素

5.2.1 (1)假设需要访问一个2D浮点型矩阵的第(i, j)个单元.

5.2.2 (2)间接访问:

5.2.3 (3)直接访问(假设矩阵数据按4字节行对齐):

5.2.4 (4)直接访问(当数据的行对齐可能存在间隙时possible alignment gaps):

5.2.5 (5)对于初始化后的矩阵进行直接访问:

5.3 3、矩阵/向量运算

5.3.1 (1)矩阵之间的运算:

5.3.2 (2)矩阵之间的元素级运算:

5.3.3 (3)向量乘积:

5.3.4 (4)单一矩阵的运算:

5.3.5 (5)非齐次线性方程求解:

5.3.6 (6)特征值与特征向量(矩阵为方阵):

6 六、视频处理

6.1 1、从视频流中捕捉一帧画面

6.1.1 (1)OpenCV 支持从摄像头或视频文件(AVI格式)中捕捉帧画面.

6.1.2 (2)初始化一个摄像头捕捉器:

6.1.3 (3)初始化一个视频文件捕捉器:

6.1.4 (4)捕捉一帧画面:

6.1.5 (5)释放视频流捕捉器:

6.2 2、获取/设置视频流信息

6.2.1 (1)获取视频流设备信息:

6.2.2 (2)获取帧图信息:

6.2.3 (3)设置从视频文件抓取的第一帧画面的位置:

6.3 3、保存视频文件

6.3.1 (1)初始化视频编写器:

6.3.2 (2)保持视频文件:

6.3.3 (3)释放视频编写器:

[编辑]

一、简介

[编辑]

1、OpenCV的特点

(1)总体描述

?OpenCV是一个基于C/C++语言的开源图像处理函数库

?其代码都经过优化,可用于实时处理图像

?具有良好的可移植性

?可以进行图像/视频载入、保存和采集的常规操作

?具有低级和高级的应用程序接口(API)

?提供了面向Intel IPP高效多媒体函数库的接口,可针对你使用的Intel CPU优化代码,提高程序性能(译注:OpenCV 2.0版的代码已显着优化,无需IPP来提升性能,故2.0版不再提供IPP接口)

(2)功能

?图像数据操作(内存分配与释放,图像复制、设定和转换)

Image data manipulation (allocation, release, copying, setting, conversion).

?图像/视频的输入输出(支持文件或摄像头的输入,图像/视频文件的输出)

Image and video I/O (file and camera based input, image/video file output).

?矩阵/向量数据操作及线性代数运算(矩阵乘积、矩阵方程求解、特征值、奇异值分解)

Matrix and vector manipulation and linear algebra routines (products, solvers, eigenvalues, SVD).

?支持多种动态数据结构(链表、队列、数据集、树、图)

Various dynamic data structures (lists, queues, sets, trees, graphs).

?基本图像处理(去噪、边缘检测、角点检测、采样与插值、色彩变换、形态学处理、直方图、图像金字塔结构)

Basic image processing (filtering, edge detection, corner detection, sampling and interpolation, color conversion, morphological operations, histograms, image pyramids).

?结构分析(连通域/分支、轮廓处理、距离转换、图像矩、模板匹配、霍夫变换、多项式逼近、曲线拟合、椭圆拟合、狄劳尼三角化)

Structural analysis (connected components, contour processing, distance transform, various moments, template matching, Hough transform, polygonal approximation, line fitting, ellipse fitting, Delaunay triangulation).

?摄像头定标(寻找和跟踪定标模式、参数定标、基本矩阵估计、单应矩阵估计、立体视觉匹配)

Camera calibration (finding and tracking calibration patterns, calibration, fundamental matrix estimation, homography estimation, stereo correspondence).

?运动分析(光流、动作分割、目标跟踪)

Motion analysis (optical flow, motion segmentation, tracking).

?目标识别(特征方法、HMM模型)

Object recognition (eigen-methods, HMM).

?基本的GUI(显示图像/视频、键盘/鼠标操作、滑动条)

Basic GUI (display image/video, keyboard and mouse handling, scroll-bars).

?图像标注(直线、曲线、多边形、文本标注)

Image labeling (line, conic, polygon, text drawing)

(3)OpenCV模块

?cv –核心函数库

?cvaux –辅助函数库

?cxcore –数据结构与线性代数库

?highgui – GUI函数库

?ml –机器学习函数库

2、有用的学习资源

[编辑]

(1)参考手册:

?/docs/index.htm (译注:在你的OpenCV安装目录内)[编辑]

(2)网络资源:

?官方网站: https://www.360docs.net/doc/642876122.html,/technology/computing/opencv/

?软件下载: https://www.360docs.net/doc/642876122.html,/projects/opencvlibrary/

[编辑]

(3)书籍:

?Open Source Computer Vision Library

by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). chenyusiyuan: 补充以下书籍

?Learning OpenCV - Computer Vision with the OpenCV Library

by Gary Bradski & Adrian Kaehler, O'Reilly Media, 1 st ed. (September, 2008).

?OpenCV教程——基础篇

作者:刘瑞祯于仕琪,北京航空航天大学出版社,出版日期:200706

[编辑]

(4)视频处理例程(在/samples/c/):

?颜色跟踪: camshiftdemo

?点跟踪: lkdemo

?动作分割: motempl

?边缘检测: laplace

[编辑]

(5)图像处理例程(在/samples/c/):

?边缘检测: edge

?图像分割: pyramid_segmentation

?形态学: morphology

?直方图: demhist

?距离变换: distrans

?椭圆拟合: fitellipse

[编辑]

3、OpenCV 命名规则

[编辑]

(1)函数名:

cvActionTargetMod(...)

Action = 核心功能(core functionality)(e.g. set, create)

Target = 目标图像区域(target image area)(e.g. contour, polygon)

Mod = (可选的)调整语(optional modifiers)(e.g. argument type)

[编辑]

(2)矩阵数据类型:

CV_(S|U|F)C

S = 符号整型

U = 无符号整型

F = 浮点型

E.g.: CV_8UC1 是指一个8位无符号整型单通道矩阵,

CV_32FC2是指一个32位浮点型双通道矩阵.

[编辑]

(3)图像数据类型:

IPL_DEPTH_(S|U|F)

E.g.: IPL_DEPTH_8U 图像像素数据是8位无符号整型.

IPL_DEPTH_32F图像像素数据是32位浮点型.

[编辑]

(4)头文件:

#include

#include

#include

#include

#include // 一般不需要,cv.h 内已包含该头文件

[编辑]

4、编译建议

[编辑]

(1)Linux:

g++ hello-world.cpp-o hello-world \

-I /usr/local/include/opencv -L /usr/local/lib \

-lm -lcv -lhighgui -lcvaux

[编辑]

(2)Windows:

在Visual Studio的‘选项’和‘项目’中设置好OpenCV相关文件的路径。[编辑]

5、C例程

////////////////////////////////////////////////////////////////////////

//

// hello-world.cpp

//

// 该程序从文件中读入一幅图像,将之反色,然后显示出来.

//

////////////////////////////////////////////////////////////////////////

#include

#include

#include

#include

#include

int main(int argc,char*argv[])

{

IplImage* img =0;

int height,width,step,channels;

uchar *data;

int i,j,k;

if(argc<2){

printf("Usage: main \n\7");

exit(0);

}

// load an image

img=cvLoadImage(argv[1]);

if(!img){

printf("Could not load image file: %s\n",argv[1]);

exit(0);

}

// get the image data

height = img->height;

width = img->width;

step = img->widthStep;

channels = img->nChannels;

data =(uchar *)img->imageData;

printf("Processing a %dx%d image with %d channels\n",height,width,channels);

// create a window

cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);

cvMoveWindow("mainWin",100,100);

// invert the image

// 相当于cvNot(img);

for(i=0;i

data[i*step+j*channels+k]=255-data[i*step+j*channels+k];

// show the image

cvShowImage("mainWin", img );

// wait for a key

cvWaitKey(0);

// release the image

cvReleaseImage(&img );

return0;

}

[编辑]

二、GUI 指令

[编辑]

1、窗口管理

[编辑]

(1)创建和定位一个新窗口:

cvNamedWindow("win1", CV_WINDOW_AUTOSIZE);

cvMoveWindow("win1",100,100);// offset from the UL corner of the screen

[编辑]

(2)载入图像:

IplImage* img=0;

img=cvLoadImage(fileName);

if(!img)printf("Could not load image file: %s\n",fileName);

[编辑]

(3)显示图像:

cvShowImage("win1",img);

该函数可以显示彩色或灰度的字节型/浮点型图像。字节型图像像素值范围为[0-255];浮点型图像像素值范围为[0-1]。彩色图像的三色元素按BGR(蓝-红-绿)顺序存储。

[编辑]

(4)关闭窗口:

cvDestroyWindow("win1");

[编辑]

(5)改变窗口大小:

cvResizeWindow("win1",100,100);// new width/heigh in pixels [编辑]

2、输入处理

[编辑]

(1)处理鼠标事件:

定义一个鼠标处理程序:

void mouseHandler(int event,int x,int y,int flags,void* param) {

switch(event){

case CV_EVENT_LBUTTONDOWN:

if(flags & CV_EVENT_FLAG_CTRLKEY)

printf("Left button down with CTRL pressed\n");

break;

case CV_EVENT_LBUTTONUP:

printf("Left button up\n");

break;

}

}

x,y: 相对于左上角的像素坐标

event: CV_EVENT_LBUTTONDOWN, CV_EVENT_RBUTTONDOWN, CV_EVENT_MBUTTONDOWN,

CV_EVENT_LBUTTONUP, CV_EVENT_RBUTTONUP, CV_EVENT_MBUTTONUP,

CV_EVENT_LBUTTONDBLCLK, CV_EVENT_RBUTTONDBLCLK, CV_EVENT_MBUTTONDBLCLK,

CV_EVENT_MOUSEMOVE:

flags: CV_EVENT_FLAG_CTRLKEY, CV_EVENT_FLAG_SHIFTKEY, CV_EVENT_FLAG_ALTKEY,

CV_EVENT_FLAG_LBUTTON, CV_EVENT_FLAG_RBUTTON, CV_EVENT_FLAG_MBUTTON

?注册该事件处理程序:

mouseParam=5;

cvSetMouseCallback("win1",mouseHandler,&mouseParam);

[编辑]

(2)处理键盘事件:

?实际上对于键盘输入并没有专门的事件处理程序.

?按一定间隔检测键盘输入(适用于循环体中):

int key;

key=cvWaitKey(10);// wait 10ms for input

?中止程序等待键盘输入:

int key;

key=cvWaitKey(0);// wait indefinitely for input

?键盘输入的循环处理程序:

while(1){

key=cvWaitKey(10);

if(key==27)break;

switch(key){

case'h':

...

break;

case'i':

...

break;

}

}

[编辑]

(3)处理滑动条事件:

?定义一个滑动条处理程序:

void trackbarHandler(int pos)

{

printf("Trackbar position: %d\n",pos);

}

?注册该事件处理程序:

int trackbarVal=25;

int maxVal=100;

cvCreateTrackbar("bar1","win1",&trackbarVal ,maxVal , trackbarHandler);

?获取当前的滑动条位置:

int pos = cvGetTrackbarPos("bar1","win1");

?设置滑动条位置:

cvSetTrackbarPos("bar1","win1",25);

[编辑]

三、OpenCV的基本数据结构

(译注:OpenCV 1.1、1.2或2.0版本中各数据结构的结构体元素有所调整,以下仅作参考)[编辑]

1、图像数据结构

[编辑]

(1)IPL 图像:

IplImage

|--int nChannels;// 颜色通道数目(1,2,3,4)

|--int depth;// 像素的位深:

|// IPL_DEPTH_8U, IPL_DEPTH_8S,

|// IPL_DEPTH_16U,IPL_DEPTH_16S,

|// IPL_DEPTH_32S,IPL_DEPTH_32F,

|// IPL_DEPTH_64F

|--int width;// 图像宽度(像素为单位)

|--int height;// 图像高度

|--char* imageData;// 图像数据指针

|// 注意彩色图像按BGR顺序存储数据

|--int dataOrder;// 0 - 将像素点不同通道的值交错排在一起,形成单一像素平面|// 1 - 把所有像素同通道值排在一起,形成若干个通道平面,再把平面排列起来

|// cvCreateImage 只能创建像素交错排列式的图像

|--int origin;// 0 –像素原点为左上角,

|// 1 –像素原点为左下角(Windows bitmaps style)

|--int widthStep;// 相邻行的同列点之间的字节数

|--int imageSize;// 图像的大小(字节为单位)= height*widthStep

|--struct _IplROI *roi;// 图像的感兴趣区域(ROI). ROI非空时对图像的

|// 处理仅限于ROI区域.

|--char*imageDataOrigin;// 图像数据未对齐时的数据原点指针

|// (需要正确地重新分配图像内存)

|// (needed for correct image deallocation)

|--int align;// 图像数据的行对齐: 4 or 8 byte alignment

|// OpenCV 中无此项,采用widthStep代替

|--char colorModel[4];// 颜色模型– OpenCV中忽略此项

[编辑]

2、矩阵与向量

[编辑]

(1)矩阵:

CvMat // 2D 矩阵

|--int type;// 元素类型(uchar,short,int,float,double) 与标志

|--int step;// 整行长度字节数

|--int rows, cols;// 行、列数

|--int height, width;// 矩阵高度、宽度,与rows、cols对应

|--union data;

|-- uchar*ptr;// data pointer for an unsigned char matrix

|--short*s;// data pointer for a short matrix

|--int*i;// data pointer for an integer matrix

|--float*fl;// data pointer for a float matrix

|--double* db;// data pointer for a double matrix

CvMatND // N-维矩阵

|--int type;// 元素类型(uchar,short,int,float,double) 与标志|--int dims;// 矩阵维数

|--union data;

||-- uchar*ptr;// data pointer for an unsigned char matrix

||--short*s;// data pointer for a short matrix

||--int*i;// data pointer for an integer matrix

||--float*fl;// data pointer for a float matrix

||--double* db;// data pointer for a double matrix

|

|--struct dim[];// 各维信息

|-- size;// 元素数目

|-- step;// 元素间距(字节为单位)

CvSparseMat // N-维稀疏矩阵

[编辑]

(2)一般矩阵:

CvArr*// 仅作为函数定义的参数使用,

// 表明函数可以接受不同类型的矩阵作为参数,

// 例如:IplImage*, CvMat* 甚至是CvSeq*.

// 矩阵的类型通过矩阵头的前4个字节信息来确定

[编辑]

(3)标量:

CvScalar

|--double val[4];//4D 向量

初始化函数:

CvScalar s = cvScalar(double val0,double val1=0,double val2=0,double val3=0);

// Example:

CvScalar s = cvScalar(20.0);

s.val[0]=20.0;

注意该初始化函数的函数名与对应的结构体名称几乎同名,差别仅在于函数名第一个字母是小写的,而结构体名第一个字母是大写的。它并不是一个C++ 构造函数。(译注:类似的还有cvMat 与CvMat、cvPoint 与CvPoint 等等)

[编辑]

3、其它结构类型

[编辑]

(1)点:

CvPoint p = cvPoint(int x,int y);

CvPoint2D32f p = cvPoint2D32f(float x,float y);

CvPoint3D32f p = cvPoint3D32f(float x,float y,float z);

//E.g.:

p.x=5.0;

p.y=5.0;

[编辑]

(2)矩形框大小(以像素为精度):

CvSize r = cvSize(int width,int height);

CvSize2D32f r = cvSize2D32f(float width,float height);

[编辑]

(3)矩形框的偏置和大小:

CvRect r = cvRect(int x,int y,int width,int height);

[编辑]

四、图像处理

[编辑]

1、图像的内存分配与释放

[编辑]

(1)分配内存给一幅新图像:

IplImage* cvCreateImage(CvSize size,int depth,int channels);

size: cvSize(width,height);

depth: 像素深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,

IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F, IPL_DEPTH_64F

channels: 像素通道数. Can be 1, 2, 3 or 4.

各通道是交错排列的. 一幅彩色图像的数据排列格式如下:

b0 g0 r0 b1 g1 r1 ...

示例:

// Allocate a 1-channel byte image

IplImage* img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);

// Allocate a 3-channel float image

IplImage* img2=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);

[编辑]

(2)释放图像:

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); cvReleaseImage(&img);

[编辑]

(3)复制图像:

IplImage* img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);

IplImage* img2;

img2=cvCloneImage(img1);// 注意通过cvCloneImage得到的图像

// 也要用cvReleaseImage 释放,否则容易产生内存泄漏

[编辑]

(4)设置/获取感兴趣区域ROI:

void cvSetImageROI(IplImage* image, CvRect rect);

void cvResetImageROI(IplImage* image);

CvRect cvGetImageROI(const IplImage* image);

大多数OpenCV函数都支持ROI.

[编辑]

(5)设置/获取感兴趣通道COI:

void cvSetImageCOI(IplImage* image,int coi);// 0=all

int cvGetImageCOI(const IplImage* image);

大多数OpenCV函数不支持COI.

[编辑]

2、图像读写

[编辑]

(1)从文件中读入图像:

IplImage* img=0;

img=cvLoadImage(fileName);

if(!img)printf("Could not load image file: %s\n",fileName);

支持的图像格式: BMP, DIB, JPEG, JPG, JPE, PNG, PBM, PGM, PPM,

SR, RAS, TIFF, TIF

OpenCV默认将读入的图像强制转换为一幅三通道彩色图像. 不过可以按以下方法修改读入方式:

img=cvLoadImage(fileName,flag);

flag: >0 将读入的图像强制转换为一幅三通道彩色图像

=0 将读入的图像强制转换为一幅单通道灰度图像

<0 读入的图像通道数与所读入的文件相同.

[编辑]

OpenCV主要函数介绍

4.1 OpenCV主要函数介绍 1) cvLoadImage 从文件中读取图像 IplImage* cvLoadImage(const char* filename,int flags=CV_LOAD_IMAGE_COLOR ); 函数cvLoadImage从指定文件读入图像,返回读入图像的指针。其中filename是要被读入的文件的文件名;flags指定读入图像的颜色和深度。 2)cvSaveImage 保存图像到文件 int cvSaveImage( const char* filename, const CvArr* image ); 函数cvSaveImage保存图像到指定文件。其中filename保存文件名。image 要保存的图像。图像格式的的选择依赖于filename的扩展名,只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。 3)cvQueryFrame从摄像头或者文件中抓取并返回一帧 IplImage* cvQueryFrame( CvCapture* capture ); 函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。其中capture视频获取结构。。 4)cvCaptureFromCAM 初始化摄像头 CvCapture* cvCaptureFromCAM( int index ); 函数cvCaptureFromCAM给从摄像头的视频流分配和初始化CvCapture结构。 其中index要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。 5)cvHaarDetectObjects 用来检测图像中的人脸区域 CV API(CvSeq*) cvHaarDetectObjects( const CvArr* image, CvHaarClassifierCascade* cascade, CvMemStorage* storage, double scale_factor CV_DEFAULT(1.1), int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0), CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0))); 用于快速检测人脸区域,便于提取得到人脸数据。其中image 为被检图像,cascade为 haar分类器级联的内部标识形式,storage 为用来存储检测到的一

opencv函数目录-Cv图像处理

目录 1 梯度、边缘和角点 1.1 Sobel 1.2 Laplace 1.3 Canny 1.4 PreCornerDetect 1.5 CornerEigenValsAndVecs 1.6 CornerMinEigenVal 1.7 CornerHarris 1.8 FindCornerSubPix 1.9 GoodFeaturesToTrack 2 采样、插值和几何变换 2.1 InitLineIterator 2.2 SampleLine 2.3 GetRectSubPix 2.4 GetQuadrangleSubPix 2.5 Resize 2.6 WarpAffine 2.7 GetAffineTransform 2.8 2DRotationMatrix 2.9 WarpPerspective 2.10 WarpPerspectiveQMatrix 2.11 GetPerspectiveTransform 2.12 Remap 2.13 LogPolar 3 形态学操作 3.1 CreateStructuringElementEx 3.2 ReleaseStructuringElement 3.3 Erode 3.4 Dilate 3.5 MorphologyEx 4 滤波器与色彩空间变换 4.1 Smooth 4.2 Filter2D 4.3 CopyMakeBorder 4.4 Integral 4.5 CvtColor 4.6 Threshold 4.7 AdaptiveThreshold 5 金字塔及其应用 5.1 PyrDown 5.2 PyrUp 6 连接部件 6.1 CvConnectedComp

OPENCV库函数使用说明

OPENCV(Intel Open Source Computer Vision Library)是一种数字图像处理和计算机视觉的函数库,由Intel公司微处理器实验室(Intel’s Microprocessor Research Lab)的视觉交互组(The Visual Interactivity Group)开发。它可以在Windows系统、Linux系统、MacOSx系统等操作平台上使用,也可以和其他编程工具结合,以满足不同的使用要求。使用OPENCV使用C/C++编写,包含300多个图像处理函数,有以下几个对立的子库组成: 1.CXCORE:一些基本函数(各种数据类型的基本运算等) 2.CV:图像处理和计算机视觉算法(图像处理、结构分析、运动分析、物体跟 踪和模式识别等) 3.HIGHGUI:用户交互部分(图形界面,图像视频输入输出,系统调用函数) 4.CVAUX:一些实验性的函数(三维跟踪等) 在这些库函数的支持下,用户可以直接调用滤波函数,形态学处理,图像特征提取,轮廓提取算法和跟踪算法,也可以添加自己编写的子函数,不但能完成复杂的开发任务,还可以提高效率,达到事半功倍的效果。 OPENCV的重要特性: 1.拥有包括300多个C函数的跨平台的中、高层API。它不依赖于其他的外部库——尽管也可以使用某些外部库。 2.对非商业应用和商业应用都是免费(FREE)的。 3.为Integrated Performance Primitives(IPP)提供了透明的接口。这意味着如果有为特定处理器优化的IPP库,OPENCV将在运行时自动加载这些库。 在VC++环境中OPENCV的使用设置: Microsoft公司开发的Visual C++是一种具有高度综合性能的软件开发工具。用它开发出的程序具有运行速度快,可移植能力强等优点,在对数字图像处理进行处理时经常采用Visual C++进行编程,通过对VC进行配置,就可以在编程过程中直接使用OPENCV的函数编写代码,减少了工作量,提高了运行效率。 在OPENCV安装完成后,首先需要把它的路径加入到系统环境变量中,然后再VC菜单Tools→Options→Directories下设置Library files路径,再选择Source files,最后选择Include files,就可以加入路径,如错误!未找到引用源。所示。设置完成后,就可以新建或打开一个使用OPENCV的工程。 打开工程后,选择菜单Project→Settings,然后将Setting for选为All Configurations,再选择右边的link标签,在Object/library modules加上工程属性中使用的库,这样就可以顺利编程。

OPENCV函数

Opencv函数 分配图像空间: IplImage*cvCreateImage(CvSize size,int depth,int channels); size:cvSize(width,height); depth:IPL_DEPTH_8U,IPL_DEPTH_8S,IPL_DEPTH_16U, IPL_DEPTH_16S,IPL_DEPTH_32S,IPL_DEPTH_32F, IPL_DEPTH_64F channels:1,2,3or4. 注意数据为交叉存取.彩色图像的数据编排为b0g0r0b1g1 r1... 举例: //分配一个单通道字节图像 IplImage*img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); //分配一个三通道浮点图像 IplImage*img2=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); 释放图像空间: IplImage*img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); cvReleaseImage(&img); 复制图像: IplImage*img1=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); IplImage*img2; img2=cvCloneImage(img1); 设定/获取兴趣区域: void cvSetImageROI(IplImage*image,CvRect rect); void cvResetImageROI(IplImage*image); vRect cvGetImageROI(const IplImage*image); 大部分OpenCV函数都支持ROI. 设定/获取兴趣通道: void cvSetImageCOI(IplImage*image,int coi);//0=all int cvGetImageCOI(const IplImage*image); 大部分OpenCV函数暂不支持COI.

OPenCV3.2中Mat对象常用函数属性总结

OPenCV3.2中Mat对象常用函数属性总结Mat对象是OpenCV2.0之后引进的图像数据结构,它能自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分。 在使用Mat对象时,有以下四个要点需要注意: 1、输出图像的内存是自动分配的 2、使用OpenCV的C++接口,不需要考虑内存分配问题 3、赋值操作和拷贝构造函数只会复制头部分 4、使用clone与copyTo两个函数实现数据完全复制 下面我们就具体介绍一下公共成员函数和公共属性。 公共成员函数: 1、cv::Mat::Mat ( int rows, int cols, int type ) 参数: rows2D数组中的行数 cols2D数组中的列数。 type数组类型。使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。

2、cv::Mat::Mat ( Size size, int type ) 参数: size 2D数组大小:Size(cols, rows)。在Size()构造函数中,行数和列数以相反的顺序排列。 type 数组类型。使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。 3、cv::Mat::Mat ( int rows, int cols, int type, const Scalar & s ) 参数: rows2D数组中的行数。 cols 2D数组中的列数。 type数组类型。使用CV_8UC1,…,CV_64FC4创建1 - 4通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(向上到CV_CN_MAX通道)矩阵。s 初始化每个矩阵元素的可选值。在构建后将所有矩阵元素设置为特定值, 使用赋值运算符Mat::operator=(const Scalar& value) 。 4、cv::Mat::Mat ( Size size, int type,

快速学习OPENCV常用函数

访问图像元素如下: 1、针对各种图像(包括4-通道)和矩阵的函数(cvGet2D,cvSet2D),但是它们都很慢. (img->origin=IPL_ORIGIN_TL)或者是左下角(img->origin=IPL_ORIGIN_BL) 假设有8-bit1-通道的图像I(IplImage*img): I(x,y)~((uchar*)(img->imageData+img->widthStep*y))[x] 假设有8-bit3-通道的图像I(IplImage*img): I(x,y)blue~((uchar*)(img->imageData+img->widthStep*y))[x*3] I(x,y)green~((uchar*)(img->imageData+img->widthStep*y))[x*3+1] I(x,y)red~((uchar*)(img->imageData+img->widthStep*y))[x*3+2] 如果增加点(100,100)的亮度30,那么可以: CvPoint pt={100,100}; ((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3]+=30; ((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3+1]+=30; ((uchar*)(img->imageData+img->widthStep*pt.y))[pt.x*3+2]+=30; CvPoint pt={100,100}; uchar*temp_ptr=&((uchar*)(img->imageData+ img->widthStep*pt.y))[x*3]; temp_ptr[0]+=30; temp_ptr[1]+=30; temp_ptr[2]+=30; 假设有32-bit浮点数,1-通道图像I(IplImage*img): I(x,y)~((float*)(img->imageData+img->widthStep*y))[x] 现在,通用方法:假设有N-通道,类型为T的图像: I(x,y)c~((T*)(img->imageData+img->widthStep*y))[x*N+c] 或者你可使用宏CV_IMAGE_ELEM(image_header,elemtype,y,x_Nc) I(x,y)c~CV_IMAGE_ELEM(img,T,y,x*N+c) 2、访问矩阵元素 设有32-bit浮点数的实数矩阵M(CvMat*mat): M(i,j)~((float*)(mat->data.ptr+mat->step*i))[j] 设有64-bit浮点数的复数矩阵M(CvMat*mat): Re M(i,j)~((double*)(mat->data.ptr+mat->step*i))[j*2] Im M(i,j)~((double*)(mat->data.ptr+mat->step*i))[j*2+1]

OpenCV最基础的图像处理的例子

?什么是OpenCV ?开源C/C++计算机视觉库. ?面向实时应用进行优化. ?跨操作系统/硬件/窗口管理器. ?通用图像/视频载入、存储和获取. ?由中、高层API构成. ?为Intel?公司的Integrated Performance Primitives (IPP) 提供了透明接口. ?特性: ?图像数据操作(分配,释放, 复制, 设定, 转换). ?图像与视频I/O (基于文件/摄像头输入, 图像/视频文件输出). ?矩阵与向量操作与线性代数计算(相乘, 求解, 特征值, 奇异值分解SVD). ?各种动态数据结构(列表, 队列, 集, 树, 图). ?基本图像处理(滤波, 边缘检测, 角点检测, 采样与插值, 色彩转换, 形态操作, 直方图, 图像金字塔). ?结构分析(连接成分, 轮廓处理, 距离转换, 模板匹配, Hough转换, 多边形近似, 线性拟合, 椭圆拟合, Delaunay三角化). ?摄像头标定 (寻找并跟踪标定模板, 标定, 基础矩阵估计, homography估计, 立体匹配). ?动作分析(光流, 动作分割, 跟踪). ?对象辨识 (特征方法, 隐马可夫链模型HMM). ?基本GUI(显示图像/视频, 键盘鼠标操作, 滚动条). ?图像标识 (直线, 圆锥, 多边形, 文本绘图) ?OpenCV 模块: ?cv - OpenCV 主要函数. ?cvaux - 辅助(实验性) OpenCV 函数. ?cxcore - 数据结构与线性代数算法. ?highgui - GUI函数. 资料链接 ?参考手册: ?/docs/index.htm ?网络资源: ?官方网页: https://www.360docs.net/doc/642876122.html,/technology/computing/opencv/?软件下载: https://www.360docs.net/doc/642876122.html,/projects/opencvlibrary/ ?书籍: ?Open Source Computer Vision Library by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). ?视频处理例程(位于/samples/c/目录中): ?色彩跟踪: camshiftdemo ?点跟踪: lkdemo

opencv最基础的图像处理

openCV——几个实用函数 2010年12月20日星期一 09:18 1. cvSmooth:各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 ); src 输入图像. dst 输出图像. smoothtype 平滑方法: . CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数cvIntegral 计算积分图像。 . CV_BLUR (simple blur) - 对每个象素param1×param2邻域求和并做尺度变换 1/(param1.param2). . CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积 . CV_MEDIAN (median blur) - 对图像进行核大小为 param1×param1 的中值滤波 (i.e. 邻域是方的). . CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. 平滑操作的第一个参数. param2 平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果 param2的值为零,则表示其被设定为param1。 param3

对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算: sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核, n=param2 对应垂直核. 对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有sigma 计算 (以保证足够精确的操作). 函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。 简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特和 32-比特浮点图像。这两种方法可以(in-place)方式处理图像。 中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像. 2.IplImage结构 由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。IplImage结构具体定义如下: typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/

Opencv中函数的用法

1、cvLoadImage:将图像文件加载至内存; 2、cvNamedWindow:在屏幕上创建一个窗口; 3、cvShowImage:在一个已创建好的窗口中显示图像; 4、cvWaitKey:使程序暂停,等待用户触发一个按键操作; 5、cvReleaseImage:释放图像文件所分配的内存; 6、cvDestroyWindow:销毁显示图像文件的窗口; 7、cvCreateFileCapture:通过参数设置确定要读入的AVI文件; 8、cvQueryFrame:用来将下一帧视频文件载入内存; 9、cvReleaseCapture:释放CvCapture结构开辟的内存空间; 10、cvCreateTrackbar:创建一个滚动条; 11、cvSetCaptureProperty:设置CvCapture对象的各种属性; 12、cvGetCaptureProperty:查询CvCapture对象的各种属性; 13、cvGetSize:当前图像结构的大小; 14、cvSmooth:对图像进行平滑处理; 15、cvPyrDown:图像金字塔,降采样,图像缩小为原来四分之一; 16、cvCanny:Canny边缘检测; 17、cvCreateCameraCapture:从摄像设备中读入数据; 18、cvCreateVideoWriter:创建一个写入设备以便逐帧将视频流写入视频文件;搜索 19、cvWriteFrame:逐帧将视频流写入文件; 20、cvReleaseVideoWriter:释放CvVideoWriter结构开辟的内存空间; 21、CV_MAT_ELEM:从矩阵中得到一个元素; 22、cvAbs:计算数组中所有元素的绝对值;

OPENCV图像处理常用函数

图像处理和图像识别中常用的OpenCV函数 2011-02-21 19:25:42|分类:默认分类|字号订阅 1、cvLoadImage:将图像文件加载至内存; 2、cvNamedWindow:在屏幕上创建一个窗口; 3、cvShowImage:在一个已创建好的窗口中显示图像; 4、cvWaitKey:使程序暂停,等待用户触发一个按键操作; 5、cvReleaseImage:释放图像文件所分配的内存; 6、cvDestroyWindow:销毁显示图像文件的窗口; 7、cvCreateFileCapture:通过参数设置确定要读入的AVI文件; 8、cvQueryFrame:用来将下一帧视频文件载入内存; 9、cvReleaseCapture:释放CvCapture结构开辟的内存空间; 10、cvCreateTrackbar:创建一个滚动条; 11、cvSetCaptureProperty:设置CvCapture对象的各种属性; 12、cvGetCaptureProperty:查询CvCapture对象的各种属性; 13、cvGetSize:当前图像结构的大小; 14、cvSmooth:对图像进行平滑处理; 15、cvPyrDown:图像金字塔,降采样,图像缩小为原来四分之一; 16、cvCanny:Canny边缘检测; 17、cvCreateCameraCapture:从摄像设备中读入数据; 18、cvCreateVideoWriter:创建一个写入设备以便逐帧将视频流写入视频文件; 19、cvWriteFrame:逐帧将视频流写入文件; 20、cvReleaseVideoWriter:释放CvVideoWriter结构开辟的内存空间; 21、CV_MAT_ELEM:从矩阵中得到一个元素;

OpenCV常用函数说明

OpenCV基础篇中的常用函数说明: (1)函数名: cvActionTargetMod(...) Action = 核心功能(core functionality) (e.g. set, create) Target = 目标图像区域(target image area) (e.g. contour, polygon) Mod = (可选的)调整语(optional modifiers) (e.g. argument type) (2)矩阵数据类型: CV_(S|U|F)C S = 符号整型 U = 无符号整型 F = 浮点型 E.g.: CV_8UC1 是指一个8位无符号整型单通道矩阵, CV_32FC2是指一个32位浮点型双通道矩阵. (3)图像数据类型: IPL_DEPTH_(S|U|F) E.g.: IPL_DEPTH_8U 图像像素数据是8位无符号整型. IPL_DEPTH_32F图像像素数据是32位浮点型. (4)头文件: #include #include #include #include #include // 一般不需要,cv.h 内已包含该头文件 4、编译建议 (1)Linux: g++ hello-world.cpp -o hello-world / -I /usr/local/include/opencv -L /usr/local/lib / -lm -lcv -lhighgui -lcvaux (2)Windows: 在Visual Studio的‘选项’和‘项目’中设置好OpenCV相关文件的路径。 5、C例程

Matlab 到 OpenCv 的常见函数转换

1、 matlab中的imread相当于OpenCV中的cvLoadImage(imageName, CV_LOAD_IAMGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR):读出的图像信息保持了原有图像的信息(包括通道信息和位深信息); rgb2gray相当于cvLoadImage(imageName, CV_LOAD_IMAGE_GRAYSCALE):单通道灰度图; 或用cvCreateImage、cvCvtColor两函数实现图像的灰度化。 2、matlab中的zeros函数相当于OpenCV中的cvSetZero函数。 3、matlab中的两矩阵点乘 .* 相当于OpenCV中的cvMul函数。 4、matlab中的两矩阵点除 ./ 相当于OpenCV中的cvDiv函数。 5、matlab中的两矩阵相加 + 相当于OpenCV中的cvAdd函数。 6、matlab中的两矩阵相减 - 相当于OpenCV中的cvSub函数。 7、matlab中的矩阵和一个常量相加 A + a 相当于OpenCV中的cvAddS函数 cvAdds(matA, cvScalar(a), matB)。 8、matlab中的矩阵和一个常量相减 A - a 相当于OpenCV中的cvSubS函数 cvSubS(matA, cvScalar(a), matB)。

9、matlab中的给矩阵赋一初值 A(:, :) = a 相当于OpenCV中的cvSet函数 cvSet(matA, cvScalar(a))。 10、matlab中取矩阵某一部分赋给另一矩阵 A = B(i : j, m : n) 相当于OpenCV中的cvGetSubRect 函数,cvGetSubRect(mat1, mat2, rect)。 11、matlab中取矩阵最大值、最小值 max(max(A))、min(min(A)) 相当于OpenCV中的cvMinMaxLoc函数 cvMinMaxLoc(A, minloc, maxloc)。 12、matlab中两矩阵相乘 A * B 相当于OpenCV中的cvMatMul函数,cvMatMul(A, B, C)。 13、matlab中计算两个三维向量的叉积 C = cross(A, B) 相当于OpenCV中的cvCrossProduct 函数,cvCrossProduct(A, B, C)。 14、matlab中计算向量的范数 c = norm(A) 相当于OpenCV中的cvNorm函数,c = cvNorm(A)。 15、matlab中求二维矩阵的奇异值分解 [u s v] = svd(A, 0) 相当于OpenCV中的cvSVD函数cvSVD(A, s, u, v)。 16、matlab中两矩阵左除 c = a / b 相当于OpenCV中的cvInvert、cvMatMul两函数即:cvInvert(a, d); cvMatMul(d, b, c)。 17、matlab中的求矩阵的逆inv函数 A = inv(B) 相当于OpenCV中的cvInvert函数:cvInvert(B,A)。

基本函数调用命令(python+opencv)

1图像读取和写入 1.1图片读取 [1]unread(img_path,flag) 读取图片,返回图片对象 img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为None flag:读取图片的方式 cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1 cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0 cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1 1.2图片展示 [1]imshow(window_name,img):显示图片,窗口自适应图片大小 window_name: 指定窗口的名字 img:要显示的图片对象 可以指定多个窗口名称,显示多个图片 waitKey(millseconds) 键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)。如果关闭图片窗口,则无法返回一个数字,也无法继续进行编写代码。 millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入0时,会一直等待键盘事件 [1]destroyAllWindows(window_name) window_name: 需要关闭的窗口名字,不传入时关闭所有窗口 1.3图片保存 [1]imwrite(img_path_name, img, num) img_path_name:要保存的文件名 img:要保存的图像 num:可选参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别,默认为3。从0到9压缩级别越高图像越小 2图像像素获取和编辑 2.1像素值获取

学习opencv平滑处理

平滑处理 平滑处理”也称“模糊处理”(blurring),是一项简单且使用频率很高的图像处理 方法。平滑处理的用途有很多,但最常见的是用来减少图像上的噪声或者失真。降 低图像分辨率时,平滑处理是很重要的(在本章的“图像金字塔”部分会详细介绍 这一点)。 目前OpenCV可以提供五种不同的平滑操作方法,所有操作都由cvSmooth函数实 尺寸调整 我们经常会将某种尺寸的图像转换为其他尺寸的图像,如放大或者缩小图像。我们 可以用cvResize()函数来放大或缩小图像。该函数可以将源图像精确转换为目标 图像的尺寸。如果源图像中设置了ROI,那么cvResize()将会对ROI区域调整 尺寸,以匹配目标图像,同样,如果目标图像中已设置ROI的值,那么 cvResize()将会将源图像进行尺寸调整并填充到目标图像的ROI中。 一般情况下,我们期望源图像和重采样后的目标图像之间的映射尽可能地平滑。参 数interpolation控制如何进行映射。当缩小图像时,目标图像的像素会映射为 源图像中的多个像素,这时需要进行插值。当放大图像时,目标图像上的像素可能 无法在源图像中找到精确对应的像素,也需要进行插值。在任何一种情况下,都有 很多z种计算像素值的方法。其中最简单的办法是将目标图像各点的像素值设为源 图像中与其距离最近的点的像素值,这就是当interpolation设为CV_工NTER一N 时用的算法。或者采用线性插值算法(CV_工NTER L工NEAR,将根据源图像附近的4 个((2x2范围)邻近像素的线性加权计算得出,权重由这4个像素到精确目标点 的距离决定。我们也可以用新的像素点覆盖原来的像素点,然后求取覆盖区域 的平均值,这种插值算法称为区域插值。。最后一种选择是三次样条插值 (Cv一工NTER CUBIC。首先对源图像附近的4x4个邻近像素进行三次样条拟 合,然后将目标像素对应的三次样条值作为目标图像对应像素点的值。 图像金字塔 图像金字塔[Adelson84]被广泛用于各种视觉应用中。图像金字塔是一个图像集 合,集合中所有的图像都源于同一个原始图像,而且是通过对原始图像连续降采样 获得,直到达到某个中止条件才停止降采样。(当然,降为一个像素肯定是中止条件。)[i307 有两种类型的图像金字塔常常出现在文献和应用中:高斯金字塔【Rosenfeld80〕和拉 普拉斯[Burt83]金字塔[Adelson84]。高斯金字塔用来向下降采样图像,而拉普拉斯 金字塔(后面会简单讨论)则用来从金字塔低层图像中向上采样重建一个图像。 要从金字塔第i层生成第i+ 1层(我们表示第i+ 1层为Gi+、),我们先要用高斯核对G…进行卷积,然后删除所有偶数行和偶数列。当然,新得到的图像面积会变为源 图像的四分之一。按上述过程对输入图像Go循环执行操作就可产生整个金字塔。OpenCV为我们提供了从金字塔中上一级图像生成下一级图像的方法: 在这种情况下,图像首先在每个维度上扩大为原来的两倍,新增的行(偶数行)以0

opencv应用函数

目录 1 一、简介 1.1 1、OpenCV的特点 1.1.1 (1)总体描述 1.1.2 (2)功能 1.1.3 (3)OpenCV模块 1.2 2、有用的学习资源 1.2.1 (1)参考手册: 1.2.2 (2)网络资源: 1.2.3 (3)书籍: 1.2.4 (4)视频处理例程(在/samples/c/): 1.2.5 (5)图像处理例程(在/samples/c/): 1.3 3、OpenCV 命名规则 1.3.1 (1)函数名: 1.3.2 (2)矩阵数据类型: 1.3.3 (3)图像数据类型: 1.3.4 (4)头文件: 1.4 4、编译建议 1.4.1 (1)Linux: 1.4.2 (2)Windows: 1.5 5、C例程 2 二、GUI 指令 2.1 1、窗口管理 2.1.1 (1)创建和定位一个新窗口: 2.1.2 (2)载入图像: 2.1.3 (3)显示图像: 2.1.4 (4)关闭窗口: 2.1.5 (5)改变窗口大小: 2.2 2、输入处理 2.2.1 (1)处理鼠标事件: 2.2.2 (2)处理键盘事件: 2.2.3 (3)处理滑动条事件: 3 三、OpenCV的基本数据结构 3.1 1、图像数据结构 3.1.1 (1)IPL 图像: 3.2 2、矩阵与向量 3.2.1 (1)矩阵: 3.2.2 (2)一般矩阵: 3.2.3 (3)标量: 3.3 3、其它结构类型 3.3.1 (1)点:

3.3.2 (2)矩形框大小(以像素为精度): 3.3.3 (3)矩形框的偏置和大小: 4 四、图像处理 4.1 1、图像的内存分配与释放 4.1.1 (1)分配内存给一幅新图像: 4.1.2 (2)释放图像: 4.1.3 (3)复制图像: 4.1.4 (4)设置/获取感兴趣区域ROI: 4.1.5 (5)设置/获取感兴趣通道COI: 4.2 2、图像读写 4.2.1 (1)从文件中读入图像: 4.2.2 (2)保存图像: 4.3 3、访问图像像素 4.3.1 (1)假设你要访问第k通道、第i行、第j列的像素。 4.3.2 (2)间接访问: (通用,但效率低,可访问任意格式的图像) 4.3.3 (3)直接访问: (效率高,但容易出错) 4.3.4 (4)基于指针的直接访问: (简单高效) 4.3.5 (5)基于c++ wrapper 的直接访问: (更简单高效) 4.4 4、图像转换 4.4.1 (1)字节型图像的灰度-彩色转换: 4.4.2 (2)彩色图像->灰度图像: 4.4.3 (3)不同彩色空间之间的转换: 4.5 5、绘图指令 4.5.1 (1)绘制矩形: 4.5.2 (2)绘制圆形: 4.5.3 (3)绘制线段: 4.5.4 (4)绘制一组线段: 4.5.5 (5)绘制一组填充颜色的多边形: 4.5.6 (6)文本标注: 5 五、矩阵处理 5.1 1、矩阵的内存分配与释放 5.1.1 (1)总体上: 5.1.2 (2)为新矩阵分配内存: 5.1.3 (3)释放矩阵内存: 5.1.4 (4)复制矩阵: 5.1.5 (5)初始化矩阵: 5.1.6 (6)初始化矩阵为单位矩阵: 5.2 2、访问矩阵元素 5.2.1 (1)假设需要访问一个2D浮点型矩阵的第(i, j)个单元. 5.2.2 (2)间接访问: 5.2.3 (3)直接访问(假设矩阵数据按4字节行对齐): 5.2.4 (4)直接访问(当数据的行对齐可能存在间隙时possible alignment gaps):

opencv中的几种常见的图像类型

1 opencv中的几种常见的图像类型 opencv中,几种常见的图像类型有: IplImage,Mat,CvMat,CvArr CvArr : 老版本的结构了。是一个抽象基类,在函数原型中,常见到CvArr(CvArr*),这就允许吧CvMar* 或者IplImage* 传递到程序或函数参数中了。 CvMat : 矩阵结构, IplImage : 是较老版本的一种类型了,对图像进行”编码“的基本结构。这些图像可能是灰度,彩色,4通道的(RGB+ alpha),其中,每个通道可以包含任意的整数或浮点数。 Mat: 新版本中的强大的一个图像容器,是和Matlab中的函数对应的。基本上讲 Mat 是一个类,由两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针。矩阵头的尺寸是常数值,但矩阵本身的尺寸会依图像的不同而不同,通常比矩阵头的尺寸大数个数量级。 2 opencv中存储图像类型转换 (1)将IplImage类型转换到Mat类型 Mat::Mat(const IplImage* img, bool copyData=false); 默认情况下,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建一个Mat矩阵头。当将参数copyData设为true后,就会复制整个图像数据。 例:

IplImage*iplImg = cvLoadImage("greatwave.jpg", 1); Matmtx(iplImg); // IplImage* ->Mat 共享数据 // or : Mat mtx = iplImg; (2)将Mat类型转换到IplImage类型 同样只是创建图像头,而没有复制数据。 例: IplImage ipl_img = img; // Mat -> IplImage (3)将CvMat类型转换为Mat类型 与IplImage的转换类似,可以选择是否复制数据。 Mat::Mat(const CvMat* m, bool copyData=false); (4)将Mat类型转换为CvMat类型 与IplImage的转换类似,不复制数据,只创建矩阵头。 例: // 假设Mat类型的imgMat图像数据存在 CvMat cvMat = imgMat; // Mat -> CvMat 几个例子: 为矩阵定义了一系列方便的操作符。我们可以将一个已经存在的灰度图像img变成全黑色: 选择感兴趣区域: 将Mat转为 C API 数据类型:

opencv几种常见滤波器使用方法

OpenCv中几种常见的滤波器 一. 滤波器的作用 1.问题:数字图像信号的频率分布? 回答:信号或者图像的能量大部分在中低频段,少部分有用信号在高频段被噪声淹没(噪声都是高频信号)。因此设计滤波器能降低高频成分幅度就能减弱噪声影响。 2.问题:为什么要进行图像滤波? 回答:1.适应图像处理要求,消除图像数字化时所混入的噪声。 2.提取对象的特征作为图像识别的特征模式(没遇到过!) 3.问题:如何理解滤波器? 回答:把滤波器想象成一个包含加权系数的窗口,当使用滤波器平滑处理图像时,相当于把窗口放到图像上,透过窗口看图像。 4.问题:滤波器实现的结果是怎么样的? 回答:对图像做平滑或滤波后图像变得更模糊。 二.滤波器分类 2.1线性滤波器 1.低通滤波器:允许低频率通过 2.高通滤波器:允许高频率通过 3.带通滤波器:允许一定范围频率通过 4.带阻滤波器:阻止一定范围频率通过 5.全通滤波器:允许所有频率通过,只是改变相位 2.1.1 Opencv中提供的线性滤波函数

1.方框滤波:boxFilter函数 函数原型:void boxFilter (InputArray src,OutputArray dst,int ddepth,Size ksize,Pointanchor=Point(-1,-1),boolnormalize=true,int borderType=BORDER_DEFAULT) 参数说明:InputArray,输入图像src。 OutputArray ,输出图像dst。 Int类型ddepth,输出图像深度,-1代表使用原图src 深度。 Size类型ksize,内核大小,一般用Size(w,h),w为宽度,h为深度。 Point类型anchor,被平滑的点,表示取内核中心,默认值Point(-1,-1)。 Bool类型normalize,标识符,表示内核是否被归一化。默认值为true。 Int类型boderType,推断图像外部像素的某种边界模式。默认值BORDER_DEFAULT。 2.均值滤波:blur函数 函数原型:void blur(InputArray src,OutputArray dst,int ddepth,Size ksize,Pointanchor=Point(-1,-1), int borderType=BORDER_DEFAULT) 参数说明:InputArray,输入图像src。

OpenCV的基本数据类型

OpenCV简介 OpenCV是Intel公司支持的开源计算机视觉库。它轻量级而且高效——由一系列C函数和少量C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。1999年在俄罗斯设立的软件开发中心“Software Developmellt Cellter¨开发的。 OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上。OpenCV还提供了Python、Ruby、MATLAB以及其他语言的接口。OpenCV 的设计目标是执行速度尽量快,主要关注实时应用。它采用优化的C代码编写,能够充分利用多核处理器的优势。如果是希望在Intel平台上得到更快的处理速度,可以购买Intel的高性能多媒体函数库IPP(Integrated Performance Primitives)。IPP库包含许多从底层优化的函数,这些函数涵盖多个应用领域。如果系统已经安装了IPP库,OpenCV会在运行时自动使用相应的IPP库。 OpenCV的一个目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的计算机视觉相关应用程序。OpenCV包含的函数有500多个,覆盖了计算机视觉的许多应用领域,如工厂产品检测、医学成像、信息安全、用户界面、摄像机标定、立体视觉和机器人等。因为计算机视觉和机器学习密切相关,所以OpenCV还提供了MLL(Machine Learning Library)机器学习库。该机器学习库侧重于统计方面的模式识别和聚类(clustering)。MLL除了用在视觉相关的任务中,还可以方便地应用于其他的机器学习场合。 OpenCV的基本结构 OpenCV主体分为五个模块,其中四个模块如图6-1所示。OpenCV的CV 模块包含基本的图像处理函数和高级的计算机视觉算法。ML是机器学习库,包含一些基于统计的分类和聚类工具。HighGUI包含图像和视频输入/输出的函数。CXCore包含OpenCV的一些基本数据结构和相关函数。

相关主题
相关文档
最新文档