《计算机视觉实验》由会员分享,可在线阅读,更多相关《计算机视觉实验(27页珍藏版)》请在金锄头文库上搜索。
1、OpenCV 基础一、一、OpenCV概述概述 (1)OpenCV是Intel开源计算机视觉库。它由一系列 C 函数和少量 C+ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。 (2)OpenCV 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库尽管也可以使用某些外部库。 (3)OpenCV 对非商业应用和商业应用都是免费的。 (4)OpenCV 为IntelIntegratedPerformancePrimitives(IPP) 提供了透明接口。二、二、VC6.0下下OpenCV的安装与配置的安装与配置1、OpenCV的安装的安装 下 载 OpenCV安
2、 装 程 序 , 将 OpenCV安 装 到C:ProgramFilesOpenCV(此目录须与VC6.0的安装目录一致)。 注注:在安装时选择将OpenCVbin加入系统变量(AddOpenCVbintothesystermPATH)。 2 2、配置、配置Windows环境变量环境变量 检查C:ProgramFilesOpenCVbin是否已经被加入到环境变量PATH,如果没有,请加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。 右击桌面上的“我的电脑”,选择“属性”选项,在弹出的窗口中 单机“高级”标签,在“环境变量”列表中 对 Path变 量 进 行 编 辑 , 将
3、 路 径 C:ProgramFilesOpenCVbin是否已经被加入到环境变量Path变量的尾部。3、配置、配置Visual C+ 6.0(1)全局设置)全局设置 菜单Tools-Options-Directories:先设置lib路径,选择Libraryfiles,在下方填入路径:C:ProgramFilesOpenCVlib 然后选择includefiles,在下方填入路径: C:ProgramFilesOpenCVcxcoreincludeC:ProgramFilesOpenCVcvincludeC:ProgramFilesOpenCVcvauxincludeC:ProgramFile
4、sOpenCVmlincludeC:ProgramFilesOpenCVotherlibshighguiC:ProgramFilesOpenCVotherlibscvcaminclude 然后选择sourcefiles,在下方填入路径: C:ProgramFilesOpenCVcvsrcC:ProgramFilesOpenCVcxcoresrcC:ProgramFilesOpenCVcvauxsrcC:ProgramFilesOpenCVotherlibshighguiC:ProgramFilesOpenCVotherlibscvcamsrcwindows 最后点击“ok”,完成设置。 (2)
5、项目设置)项目设置 每创建一个将要使用OpenCV的VCProject,都需要给它指定需要的lib。菜单:Project-Settings,然后将Settingfor选为AllConfigurations,然后选择右边的link标签,在Object/librarymodules附加上 :cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib 三、三、OpenCV中常用数据结构中常用数据结构1、CvPoint CvPoint定义基于二维整型坐标上的点,其结构如下。 TypedefstructCvPointintx;/*x坐标,通常以0为基点 */i
6、nty;/*y坐标,通常以0为基点 */ CvPoint; /*构造函数*/ inlineCvPointcvPoint(intx;inty);/*从CvPoint2D32f转换得来*/inlineCvPointcvPointFrom32f(CvPoint2D32fpoint);2、CvPoint2D32fCvPoint2D32f定义基于二维浮点坐标上的点,其结构如下。TypedefstructCvPoint2D32fFloatx;/*x坐标,通常以0为基点 */Floaty;/*y坐标,通常以0为基点 */CvPoint2D32f;/* 构造函数*/inlineCvPoint2D32fcvPo
7、int2D32f(doublex;doubley);/* 从CvPoint转换得来*/inlineCvPoint2D32fcvPointTo32f(CvPointpoint);3、CvSizeCvSize以像素为单位定义矩形框大小,其结构如下。TypedefstructCvSizeintwidth;/*矩形宽*/intheight;/*矩形高*/CvSize;/* 构造函数*/inlineCvSizecvSize(intwidth;intheight);4、CvScalarCvScalar定义可存放14个数值的数组,其结构如下。TypedefstructCvScalardoubleval4;C
8、vScalar;/*构造函数用val0初始化val0,用val1初始化val1,等等*/inlineCvScalarcvScalar(doubleval0,doubleval1=0,doubleval2=0,doubleval3=0);/*构造函数用val0123初始化val0123*/inlineCvScalarcvScalarAll(doubleval0123);/*构造函数用val0初始化val0,用0初始化val1val3*/inlineCvScalarcvRealScalar(doubleval0);5、IplImage IplImage定义IPL图像的头部,其结构如下。 由于Ope
9、nCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库IntelImageProcessingLibrary(IPL),该函数库主要是针对图像处理。 6、CvArr 不确定数组typedefvoidCvArr;CvArr*仅仅是被用于作函数的参数,用于指示函数接收的数组类型可以不止一个,如IplImage*,CvMat*甚至CvSeq*.最终的数组类型是在运行时通过分析数组头的前4个字节判断。四、常用函数四、常用函数1、图像载入函数、图像载入函数 函数cvLoadImage载入指定图像文件,并返回指向该
10、文件的IplImage指针。函数支持bmp、jpg、png、tiff等格式的图像。其函数原型如下:IplImage*cvLoadImage(constchar*filename,intiscolor);其中,filename是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。2. 窗口定义函数窗口定义函数 函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下:intcvNamedWindow(constchar*name,unsig
11、nedlongflags);其中,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。3. 图像显示函数图像显示函数函数cvShowImage是在指定的窗口中显示图像,其函数原型如下:voidcvShowImage(constchar*name,constCvArr*image);其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。4. 图像保存函数图像保存函数函数cvSaveImage以指定的文件名保存IplImag
12、e类型的指针变量,其函数原型如下:intcvSaveImage(constchar*filename,constCvArr*image);其中,filename是图像保存路径和名称,image是IplImage指针变量。5. 图像销毁函数图像销毁函数 函数cvReleaseImage销毁已定义的IplImage指针变量,释放占用内存空间。其函数原型如下:voidcvReleaseImage(IplImage*image);其中,image为已定义的IplImage指针。举例: IplImage*src;src=cvLoadImage(fruits.jpg,-1);cvNamedWindow(f
13、ruits.jpg,0);cvShowImage(fruits.jpg,src);cvWaitKey(0);cvSaveImage(D:/save.jpg,src);cvDestroyWindow(Fruits.jpg);cvReleaseImage(&src);6、cvCreateImage功能:函数cvCreateImage创建图像头并分配数据。格式:IplImage*cvCreateImage(CvSizesize,intdepth,intchannels);参数:size图像宽和高。depth像素位深度,可以是下面之一:IPL_DEPTH_8U无符号8位整型数。IPL_DEPTH_8S
14、有符号8位整型数。IPL_DEPTH_16U无符号16位整型数。IPL_DEPTH_16S有符号16位整型数。IPL_DEPTH_32S有符号32位整型数。IPL_DEPTH_32F单精度浮点数。IPL_DEPTH_64F双精度浮点数。Channels 每个元素(像素)的通道号,可以是1,2,3,4。通道时交叉存储的,例如,通常的彩色图像数据排列是b0 g0r0b1g1r1虽然通常IPL图像格式可以存储非交叉存取的图像,并且OpenCV也能处理,但是此函数只能创建交叉存取图像。7、cvCircle功能:绘制圆形。格式:voidcvCircle(CvArr*img,CvPointcenter,i
15、ntradius,CvScalarcolor,intthickness=1,intlinetype=8,intshift=0);参数:img图像;center圆心坐标;radius圆形的半径color线条的颜色;thickness如果是正数,表示组成圆的线条的粗细程度。否则,表示圆是否被填充。line_type线条的类型。shift圆心坐标点和半径值的小数点位数。说明:函数cvCircle绘制或填充一个给定圆心和半径的圆。圆被感兴趣矩形所裁剪。若指定圆的颜色,可以使用宏CV_RGB(r,g,b)。8、CvtColor 功能:色彩空间转换格式:voidcvCvtColor(constCvArr*
16、src,CvArr*dst,intcode);参数:src输入的8-比特或浮点图像.dst输出的8-比特或浮点图像.code色彩空间转换,通过定义函数cvCvtColor将输入图像从一个色彩空间转换为另外一个色彩空间。五、边缘检测函数五、边缘检测函数1、Sobel功能:使用扩展Sobel算子计算一阶、二阶、三阶或混合图像差分。格式:voidcvSobel(constCvArr*src,CvArr*dst,intxorder,intyorder,intaperture_size=3);参数:src输入图像;dst输出图像;xorderx方向上的差分阶数;yordery方向上的差分阶数;apert
17、ure_size扩展Sobel核的大小,必须是1,3,5或7。除了尺寸为1,其它情况下,aperture_sizeaperture_size可分离内核将用来计算差分。 2、Laplace功能:计算图像的Laplacian变换格式:voidcvLaplace(constCvArr*src,CvArr*dst,intaperture_size=3);参数:src输入图像.;dst输出图像;aperture_size核大小(与cvSobel中定义一样).函数cvLaplace计算输入图像的Laplacian变换。3、Canny功能:采用Canny算法做边缘检测格式:voidcvCanny(constCvArr*image,CvArr*edges,doublethreshold1,doublethreshold2,intaperture_size=3);参数:image输入图像;edges输出的边缘图像threshold1第一个阈值;threshold2第二个阈值aperture_sizeSobel算子内核大小(见cvSobel).函数cvCanny采用CANNY算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。