OpenCV常用函数说明

OpenCV常用函数说明
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例程

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

//

// 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

// 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)处理鼠标事件:

o 定义一个鼠标处理程序:

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 o 注册该事件处理程序:

mouseParam=5;

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

(2)处理键盘事件:

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

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

int key;

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

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

int key;

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

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

while(1){

key=cvWaitKey(10);

if(key==27) break;

switch(key){

case'h':

...

break;

case'i':

...

break;

}

}

(3)处理滑动条事件:

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

void trackbarHandler(int pos)

{

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

}

o 注册该事件处理程序:

int trackbarVal=25;

int maxVal=100;

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

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

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

o 设置滑动条位置:

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]=10.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);

vRect 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 读入的图像通道数与所读入的文件相同.

(2)保存图像:

if(!cvSaveImage(outFileName,img)) printf("Could not save: %s/n", outFileName);

保存的图像格式由outFileName 中的扩展名确定.

3、访问图像像素

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

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

o 对于单通道字节型图像:

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); CvScalar s;

s=cvGet2D(img,i,j); // get the (i,j) pixel value

printf("intensity=%f/n",s.val[0]);

s.val[0]=111;

cvSet2D(img,i,j,s); // set the (i,j) pixel value

o 对于多通道字节型/浮点型图像:

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); CvScalar s;

s=cvGet2D(img,i,j); // get the (i,j) pixel value

printf("B=%f, G=%f, R=%f/n",s.val[0],s.val[1],s.val[2]);

s.val[0]=111;

s.val[1]=111;

s.val[2]=111;

cvSet2D(img,i,j,s); // set the (i,j) pixel value

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

o 对于单通道字节型图像:

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); ((uchar *)(img->imageData + i*img->widthStep))[j]=111;

o 对于多通道字节型图像:

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3); ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B

((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G

((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R

o 对于多通道浮点型图像:

IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B

((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G

((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R

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

o 对于单通道字节型图像:

IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); int height = img->height;

int width = img->width;

int step = img->widthStep/sizeof(uchar);

uchar* data = (uchar *)img->imageData;

data[i*step+j] = 111;

o 对于多通道字节型图像:

IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3); int height = img->height;

int width = img->width;

int step = img->widthStep/sizeof(uchar);

int channels = img->nChannels;

uchar* data = (uchar *)img->imageData;

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

o 对于多通道浮点型图像(假设图像数据采用4字节(32位)行对齐方式):

IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); int height = img->height;

int width = img->width;

int step = img->widthStep/sizeof(float);

int channels = img->nChannels;

float * data = (float *)img->imageData;

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

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

o 首先定义一个c++ wrapper ‘Image’,然后基于Image定义不同类型的图像:

template class Image

{

private:

IplImage* imgp;

public:

Image(IplImage* img=0) {imgp=img;}

~Image(){imgp=0;}

void operator=(IplImage* img) {imgp=img;}

inline T* operator[](const int rowIndx) {

return ((T *)(imgp->imageData + rowIndx*imgp->widthStep));} };

typedef struct{

unsigned char b,g,r;

} RgbPixel;

typedef struct{

float b,g,r;

} RgbPixelFloat;

typedef Image RgbImage;

typedef Image

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/526233649.html,/technology/computing/opencv/?软件下载: https://www.360docs.net/doc/526233649.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的一些基本数据结构和相关函数。

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