最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

opencv笔记

来源:动视网 责编:小OO 时间:2025-09-29 18:58:44
文档

opencv笔记

Opencv中open为openSource,CV为computerVision计算机视觉Opencv特征:1.开源计算机视觉库采用C/C++编写2.目的是开发实时应用程序3.于操作系统、硬件和图形管理器4.具有通用的图像、视频载入,保存和获取模块5.具有底层和高层的应用开发包Opencv目标:为解决计算机视觉问题提供基本工具基本组成:高层函数、基本函数Opencv模块(主要)1、CV主要的OpenCV函数:图像处理与视觉算法2、ML机器学习、模式分类和回归分析,统计分离器3、HighGU
推荐度:
导读Opencv中open为openSource,CV为computerVision计算机视觉Opencv特征:1.开源计算机视觉库采用C/C++编写2.目的是开发实时应用程序3.于操作系统、硬件和图形管理器4.具有通用的图像、视频载入,保存和获取模块5.具有底层和高层的应用开发包Opencv目标:为解决计算机视觉问题提供基本工具基本组成:高层函数、基本函数Opencv模块(主要)1、CV主要的OpenCV函数:图像处理与视觉算法2、ML机器学习、模式分类和回归分析,统计分离器3、HighGU
Opencv 中 open 为openSource ,CV为computer Vision计算机视觉

Opencv特征:

1.开源计算机视觉库采用C/C++编写

2.目的是开发实时应用程序

3.于操作系统、硬件和图形管理器

4.具有通用的图像、视频载入,保存和获取模块

5.具有底层和高层的应用开发包

Opencv目标:为解决计算机视觉问题提供基本工具

基本组成:高层函数、基本函数

Opencv模块(主要)

1、CV 主要的OpenCV函数:图像处理与视觉算法

2、ML 机器学习、模式分类和回归分析,统计分离器

3、HighGUI 图像视频输入/出

4、CXcore 数据结构与线性代数支持,基本函数

常用的视频处理:

彩色跟踪,点跟踪,动运分割,边缘检测

常用的图像处理:

边缘检测,分割,形态学操作,直方图,距离变换,椭圆拟合

命名规则:

1.通用矩阵数据类型 :CV_(位数)(S|U|F)C(通道数)  ---位数也叫作深度

S:带符,U:无符,F:浮点, CV_32FC2 :32位浮点数双通道矩阵

2.通用图像数据类型:IPL_DEPTH_(位数)( S|U|F)

IPL_DEPTH_8U :8位无符号整数图像

一、基础知识

1.基础数据结构

    1.1. CvPoint

CvPoint 二维坐标系下的点,类型为整型 

typedef struct CvPoint

 {

    int x; /* X坐标, 通常以0为基点 */

    int y; /* y坐标, 通常以0为基点 */

 }

    

1.2. CvSize  矩形框大小,以像素为精度 

typedef struct CvSize

{

    int width; /* 矩形宽 */

    int height; /* 矩形高 */

}

1.3.CvRect  矩形框的偏移和大小

typedef struct CvRect

{

    int x; /* 方形的最左角的x-坐标 */

    int y; /* 方形的最上或者最下角的y-坐标 */

    int width; /* 宽 */

    int height; /* 高 */

 }

1.4. CvScalar 定义存放1- 4个数值的数组。

            typedef struct Cvscalar{

            double val[4];

}CvScalar;  //可用来表示RGBA的值,A=alpha透明度

    1.5. IplImage

        width, height ,depth (深度),nchannels (通道数) , origin (原点坐标)

        imageData  , ROI

1.6 CvMemStorage  内存存储器

typedef struct CvMemStorage

{

struct CvMemBlock* bottom;/* first allocated block */

struct CvMemBlock* top; /* the current memory block - top of the stack */

struct CvMemStorage* parent; /* borrows new blocks from */

int block_size; /* block size */

int free_space; /* free space in the top block (in bytes) */

} CvMemStorage;

内存存储器是一个可用来存储诸如序列,轮廓,图形,子划分等动态增长数据结构的底层结构。它是由一系列以同等大小的内存块构成,呈列表型 ---bottom 域指的是列首,top 域指的是当前指向的块但未必是列尾.在bottom和top之间所有的块(包括bottom, 不包括top)被完全占据了空间;在 top和列尾之间所有的块(包括块尾,不包括top)则是空的;而top块本身则被占据了部分空间 -- free_space 指的是top块剩馀的空字节数。 

新分配的内存缓冲区(或显式的通过 cvMemStorageAlloc 函数分配,或隐式的通过 cvSeqPush, cvGraphAddEdge等高级函数分配)总是起始于当前块(即top块)的剩馀那部分,如果剩馀那部分能满足要求(够分配的大小)。分配后,free_space 就减少了新分配的那部分内存大小,外加一些用来保存适当列型的附加大小。当top块的剩馀空间无法满足被分配的块(缓冲区)大小时,top块的下一个存储块被置为当前块(新的top块) -- free_space 被置为先前分配的整个块的大小。 

如果已经不存在空的存储块(即:top块已是列尾),则必须再分配一个新的块(或从parent那继承,见 cvCreateChildMemStorage)并将该块加到列尾上去。于是,存储器(memory storage)就如同栈(Stack)那样, bottom指向栈底,(top, free_space)对指向栈顶。栈顶可通过 cvSaveMemStoragePos保存,通过 cvRestoreMemStoragePos 恢复指向, 通过 cvClearStorage 重置。

二、矩阵 

1.分配与释放

1.1. 分配矩阵        CvMat* cvCreateMat( int rows, int cols, int type );

                    例如:CvMat* M = cvCreateMat( 4 , 4, CV_32FC1 );

1.2. 释放矩阵        void cvReleaseMat( CvMat * * );

                    例如:CvMat* M = cvCreateMat( 4 , 4, CV_32FC1 );

 cvReleaseMat(&M);

    1.3. 复制矩阵    CvMat* cvCloneMat( CvMat * );

                    例如:CvMat* M2 = cvCloneMat( M1 );

 

1.4. 初始化矩阵    double a[] ={ 1,2,3,4,  5,6,7,8,  9,10,11,12};

                    CvMat Ma = cvMat( 3 , 4, CV_FC1 , a );

                    Or  cvInitMatHeader( &Ma , 3 , 4, CV_FC1 , a);

2.矩阵的访问

2.1. 直接访问(常用)        cvmSet( M , i , j , 2.0 );  ==  set M( i , j )

                    t = cvmGet ( M , i , j );  == get M( i , j )

2.2. 已知对齐方式直接访问

                CvMat * M = cvCreateMat( 4 , 4 , CV_32FC1 );

             int n = M->cols;

             float * data = M->data.fl; (若位是data.db)

                data[i*n+j] = 3.0; 

2.3.未知对齐方式直接访问

int step = M->step / sizeof (float); float * data = M->data.fl;

(data+i*step)[j] = 3.0;

3.矩阵的操作

3.1.cvAdd( Ma , Mb , Mc );矩阵加 ||cvsub减,cvMatMul( Ma, Mb, Mc)矩阵乘

3.2.cvTranspose(&Ma,&Mb);转置  (注意,Ma与Mb必须是对应的,Ma行=Mb列)

3.3.    cvInvert(&Ma,&Ma,CV_LU); 求逆矩阵

三、 GUI命令 

1.    基本操作

    IplImage* img =  cvLoadImage(filename,1); //声明IplImage指针

    cvNamedWindow( "Image", 1 ); //创建窗口

       cvMoveWindow( “Image” , 100 ,100); 偏移量从左上角起

       cvResizeWindow( “Image” , 100 , 100 ); 缩放窗口

    cvShowImage( "Image", img ); //显示图像

    cvWaitKey(0); //等待按键

    cvDestroyWindow( "Image" );//销毁窗口

    cvReleaseImage( &img ); //释放图像

四、图像的使用与操作   

1.分配与释放,如上

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

            其中,size 是一个cvSize结构,

                 depth 为像素深度,用比特表示,IPL_DEPTH_(8U|16S|F)等

       channels 为每个像素的通道数,通道为交叉排列,一幅彩色图像通常排列为 b0 g0 r0  b1 g1 r1  b2 g2 r2

例如:IplImage * img = cvCreateImage( cvSize (0,480) , IPL_DEPTH_F, 3 )

2. 复制图像   IplImage * img2 = cvCloneImage(img1);

3.反转图像

4.图像操作

4.1. 从文件读

        IplImage * img = 0;

        img = cvLoadImage (filename , flag );

        if (!img) printf ( “不能打开图像” );

    其中,flag>0载入图像强制为3通道彩色,=0强制为灰度图像 ,<0通道数由图像定

4.2 写图像入文件 (例3-3 改图像文件格式)

    不能保存图像” );

4.3. 绘制命令

     4.3.1. 画矩形 (下面语句画一个对角(100,100)(200,200)线粗1的红色矩形)

        cvRectangle (img , cvPoint (100, 100) , cvPoint ( 200, 200 ) , cvScalar (255 , 0 ,0), 1 );

     4.3.2. 画圆 [中心点,半径,绿色,线粗]

        cvCircle ( img , cvPoint ( 100, 100) , 20 , cvScalar( 0, 255 , 0) , 1 );

     4.3.3. 画线段 [起点,终点,绿色,线粗]

        cvLine ( img , cvPoint (100 , 100),cvPoint (200, 200 ) , cvScalar(0, 255 , 0) , 1 );

  4.3.4. 画多边形

        CvPoint curve1[] = {10,10,  10,100,  100,100,  100,10};

CvPoint curve2[] = {30,30,  30,130,  130,130,  130,10};

CvPoint * curveArr[ 2 ] = { curve1 , curve2};

int nCurvePts[ 2 ] = {4,5};

int nCurves = 2;

int isCurveClosed = 1;

cvPolyLine(img, curveArr, nCurvePts, nCurves, isCurveClosed, cvScalar(0,255,0,0), 1,1,0);

(图像文件,顶点指针数组,顶点数数组,多边形个数,封闭,颜色,粗细,线类型,0)

五、视频的使用与操作

5.1 从视频序列中捕捉图像帧

    5.1.1. 对摄像头的初始化捕捉

        CvCapture * capture  =  cvCaptureFromCAM(0);

5.1.2.对文件的初始化捕捉

CvCapture * capture  =  cvCaptureFormAVI( *infile.avi );

5.1.3.捕捉某一帧

5.1.4.释放捕捉源

cvReleaseCapture (&capture); 注意,从视频捕捉的帧不用释放

5.2 从摄像头获取信息

5.3. 对AVI文件的处理

    cvcamPlayAVI(filename, HWND, 320, 240, callback);

六、模式识别与图像处理

1.图像处理

1.1 边缘检测

1.2数图像中的拐点数

文档

opencv笔记

Opencv中open为openSource,CV为computerVision计算机视觉Opencv特征:1.开源计算机视觉库采用C/C++编写2.目的是开发实时应用程序3.于操作系统、硬件和图形管理器4.具有通用的图像、视频载入,保存和获取模块5.具有底层和高层的应用开发包Opencv目标:为解决计算机视觉问题提供基本工具基本组成:高层函数、基本函数Opencv模块(主要)1、CV主要的OpenCV函数:图像处理与视觉算法2、ML机器学习、模式分类和回归分析,统计分离器3、HighGU
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top