OpenCV的安装.docx

上传人:b****6 文档编号:9045808 上传时间:2023-02-02 格式:DOCX 页数:11 大小:18.97KB
下载 相关 举报
OpenCV的安装.docx_第1页
第1页 / 共11页
OpenCV的安装.docx_第2页
第2页 / 共11页
OpenCV的安装.docx_第3页
第3页 / 共11页
OpenCV的安装.docx_第4页
第4页 / 共11页
OpenCV的安装.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

OpenCV的安装.docx

《OpenCV的安装.docx》由会员分享,可在线阅读,更多相关《OpenCV的安装.docx(11页珍藏版)》请在冰豆网上搜索。

OpenCV的安装.docx

OpenCV的安装

(一)openCV的安装

1.        下载最新版openCVBeta5,网址为color=#800080

2.        下载完毕后直接点击安装。

安装完毕后打开_make文件夹下的.dsw(vc6)或.sln(),点击project下的batchbuild,注意你的机子是32位的话,选重所有的win32Debug和Release(不要选择64位的),点击Rebuild。

这样,所需要的库文件就生成了。

下一步,要建你自己的文件。

(PS:

openCVBeta5有一个bug,建立的时候需要改一个注释注错了的文件)

3.        打开vc6或,新建一工程(win32console,win32project,MFC都可以,取决于你的习惯)

4.        配置你自己的工程

对于vc6:

projectàsettingsàallconfigurations

C/C++标签àCategory中选择PrepreocessoràAdditionalincludedirectories项,输入以“,”分开的相对路径(注意相对路径的格式与你的openCV文件夹与你的工程文件夹相对位置有关),如我的工程建立在OpenCV的目录下,则我可以这样设置相对路径:

..\cvaux\include,..\cxcore\include,..\cv\include,..\otherlibs\highgui,..\otherlibs\cvcam\include;当然,也可以输入绝对路径如C:

\ProgramFiles\OpenCV\cv\include…

Link标签àCategory中选择GeneralàObject/librarymodules,输入以空格分开的cvd.libhighguid.libcvauxd.libcxcored.libcvcamd.lib

Link标签àCategory中选择InputàObject/librarymodules,输入以空格分开的cvd.libhighguid.libcvauxd.libcxcored.libcvcamd.lib

Link标签àCategory中选择InputàAdditionalLibrarypath,输入包含lib库的相对路径或绝对路径,我的工程相对路径设置为..\lib

设置完以上点击确定。

对于V:

projectàpropertiesàallconfigurations

C/C++àAdditionalIncludeDirectoriesà每行分开的相对路径或绝对路径,如我的工程里这样设置..\..\cv\include ..\..\cvaux\include ..\..\highgui\include ..\..\otherlibs\highgui ..\..\otherlibs\cvcam\include

LinkeràGeneralàAdditionallibrarydirectories:

..\..\lib

LinkeràInputàAdditionalDependencies:

cv.libcxcore.lib cvaux.lib cvcam.libhighgui.lib(每行一个)

设置完以上点击确定。

5.加入openCV的工程到你的工程里并设置依赖关系

  vc6:

ProjectàInsertprojectintoworkspaceàcv\cv.dsp

同样加入cvaux.dsp,cxcore.dsp,highgui.dsp

ProjectàDependencies:

cv选择cxcore;cvaux选择cv,cxcore;highgui选择cxcore;你的工程选择所有

  VFileàAddprojectàExistingprojectàcv\cv.vcproj

同样加入cvaux.vcproj,cxcore.vcproj,highgui.vcproj

在SolutionExplorer中,鼠标右击Solution‘yourproject’(5projects)àproperties中设置依赖关同,同vc6

(二)openCV简单使用入门

这样就配置成功了,你可以使用openCV里。

下面简单介绍一些openCV简单的图像操作的例子。

帮助初学者入门。

在使用时,只要把头文件包括进来就可以直接使用了。

#include“cv.h” #include“highgui.h”(具体每个库中的内容,可参阅openCV手册)

1. 打开图像

   //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

//打开图像文件,成功返回IplImage*图像指针,否则返回NULL

//.....................................................................................................................

IplImage*WINAPIimgFileOpen()

{

     IplImage*pImg=0;//声明IplImage指针

     CStringfileName="";

     

     //窗口对话窗体的文件属性

   staticcharszFilter[]="图像文件格式(*.bmp)|*.bmp|JPGfileformat(*.jpg)|*.jpg|TIFfileformat(*.tif)|*.tif|";

     

     //打开文件对话窗口

     CFileDialogOpenDlg(TRUE,NULL,NULL/*LastFilePath*/,OFN_HIDEREADONLY|OFN_EXPLORER,szFilter,NULL);

     OpenDlg.m_ofn.lpstrTitle="OpenBMP,JPGandTIFFiles";

     

     //从文件对话窗口中打开图像

     if(OpenDlg.DoModal()==IDOK)

           fileName=OpenDlg.GetPathName();//获得文件名

     else

           returnNULL;

     

     //图像文件成功打开

     pImg=cvLoadImage(fileName,0);  

     

     //返回

     returnpImg;

}

2.如果把上面打开的图像显示出来,则可以这样调用:

   IplImage*pOpenImg=imgFileOpen();//打开图像

   CstringsrcWinLabel=“sourceimage”;//窗体title

     if(pOpenImg)//如果成功打开则显示

     {

       cvNamedWindow(srcWinLabel,1);//创建窗体

       cvShowImage(srcWinLabel,pOpenImg);//显示图像

 

       cvWaitKey(0);     //等待按键

 

       cvReleaseImage(&pOpenImg);

       cvDestroyWindow(srcWinLabel);//销毁窗口

     }

3.一些常用操作如角点检测:

BOOLWINAPIFindCorner(IplImage*srcImg1,doublequalityLevel,doubleminDistance)

{

        //定义循环变得与检测角点数量

        int i,cornerCount =max_corners;

 

        //定义IplImage指针图像

        IplImage*eigImage1 =0;

        IplImage*tempImage1=0;

        IplImage*smoothImg1=0;

        IplImage*grayImg1  =0;

 

        //初始化,分配空间

        //浮点格式

        eigImage1 =cvCreateImage(cvGetSize(srcImg1),IPL_DEPTH_32F,1);

        tempImage1=cvCreateImage(cvGetSize(srcImg1),IPL_DEPTH_32F,1);

 

        //灰度单通道格式

        smoothImg1=cvCreateImage(cvGetSize(srcImg1),IPL_DEPTH_8U,1);

        grayImg1  =cvCreateImage(cvGetSize(srcImg1),IPL_DEPTH_8U,1);

 

        //格式转换:

转换成灰度图像

        if(srcImg1->nChannels!

=1)

        {

                 cvCvtColor(srcImg1,grayImg1,CV_BGR2GRAY);

        }

        else

        {

                 cvCopy(srcImg1,grayImg1);

        }

 

       //启用高斯滤波,平滑图像

 //  cvSmooth(grayImg1,smoothImg1,CV_GAUSSIAN,9,9);

 

   cvCopy(grayImg1,smoothImg1);//不平滑时把图像COPY到smoothImg1,以便后面处理

 

        //角点

        cvGoodFeaturesToTrack(smoothImg1,eigImage1,tempImage1,corners,

                                  &cornerCount,qualityLevel,minDistance,0);

   //子像素极角点

        cvFindCornerSubPix(smoothImg1,corners,cornerCount,cvSize(5,5),cvSize(-1,-1),

                               cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,100,0.1));

 

   //drawcirclesateachcornerlocationinthegrayimageand

   //printoutalistthecorners 画出所有角点

   if(cornerCount>0)

   {

       for(i=0;i

       {

           cvCircle(srcImg1,cvPoint((int)(corners[i].x),(int)(corners[i].y)),6,

               CV_RGB(255,0,0),2,CV_AA,0);

       }

   }

 

        //创建窗体,以便显示标记出角点的图像

        cvNamedWindow("cornersofimage",1);

 

        //显示标记图像

   cvShowImage("cornersofimage",srcImg1);

 

        //等待按键

        cvWaitKey(0);

 

        //销毁窗体

        cvDestroyWindow("cornersofimage");

 

        //释放空间

        cvReleaseImage(&eigImage1);

        cvReleaseImage(&tempImage1);

        cvReleaseImage(&smoothImg1);

        cvReleaseImage(&grayImg1);//showImg1

 

        //返回

        returnTRUE; 

}

 

4.Hough变换检测圆

BOOLWINAPIHoughCircle(IplImage*img)

{

        if(img==NULL)

                 returnFALSE;

        

   IplImage*gray=cvCreateImage(cvGetSize(img),8,1);

   CvMemStorage*storage=cvCreateMemStorage(0);

        

//转换成灰度图像

if(img->nChannels!

=1)

        cvCvtColor(img,gray,CV_BGR2GRAY);

        else

        cvCopy(img,gray);

   //平滑化

   cvSmooth(gray,gray,CV_GAUSSIAN,9,9);

        

   //Hough变换求圆

  //CvSeq*circles=cvHoughCircles(gray,storage,CV_HOUGH_GRADIENT,2,gray->height/4,200,100);

        CvSeq*circles=cvHoughCircles(gray,storage,CV_HOUGH_GRADIENT,2,gray->height/4,250,55);

        

   //画出识别出的圆

   inti;

   for(i=0;itotal;i++){

                 float*p=(float*)cvGetSeqElem(circles,i);

                 cvCircle(img,cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]),CV_RGB(255,0,0),3,8,0);

        //      cvCircle(img,cvPoint(cvRound(p[0]),cvRound(p[1])),100,CV_RGB(255,0,0),3,8,0);

   }

        

   //窗体显示

   cvNamedWindow("Win",1);

        

   //画像表示

   cvShowImage("Win",img);

        

   //等待按键

   cvWaitKey(0);

        

   //释放

   cvReleaseImage(&img);

   cvReleaseImage(&gray);

   cvDestroyWindow("Win");

        

   returnTRUE;

}

5.        再比如轮廓检测

//求轮廓/////////////////////

intlevels=3;          ///

CvSeq*contours=0;     ///

IplImage*imgContour;    ///

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

intupper =80;

intlower =10;

CvMemStorage*storageContours;

 

voidon_trackbarContour(intpos)

{

        //定义变量

        IplImage*cnt_img;

   CvSeq*_contours;

   int_levels;

 

        //分配空间、初始化

   cnt_img=cvCreateImage(cvGetSize(imgContour),8,3);

   _contours=contours;

   _levels=levels-3;

   cvZero(cnt_img);

 

        //画轮廓

   cvDrawContours(cnt_img,_contours,CV_RGB(255,0,0),CV_RGB(0,255,0),

                            _levels,1,CV_AA,cvPoint(0,0));

 

        //显示轮廓图像

   cvShowImage("contours",cnt_img);

 

        //释放空间

   cvReleaseImage(&cnt_img);

}

 

voidWINAPIfindContour(IplImage*pImg)

{

        //定义指针变量

        CvMemStorage*storage;

   IplImage*img;

 

        //初始化分配空间

   storage=cvCreateMemStorage(0);

   img=cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,1);

   imgContour=cvCreateImage(cvGetSize(pImg),IPL_DEPTH_8U,3);

 

        //Copy图像,便于on_trackbarContour中操作

        cvCopy(pImg,imgContour);

 

        //转换成灰度图像

if(pImg->nChannels!

=1)

        cvCvtColor(pImg,img,CV_BGR2GRAY);

else

   cvCopy(pImg,img);

        //边缘提取

   cvCanny(img,img,(float)33,(float)33*3,3);//0.0,100,5);

 

        //阈值分割

 //cvThreshold(img,img,150,255,CV_THRESH_BINARY);

 

        //创建窗体显示要操作的图像

   cvNamedWindow("image",1);

   cvShowImage("image",img);

   

        //找轮廓

        //CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE

   cvFindContours(img,storage,&contours,sizeof(CvContour),             

                   CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));

 

        //commentthisoutifyoudonotwantapproximation

   contours=cvApproxPoly(contours,sizeof(CvContour),storage,

                                     CV_POLY_APPROX_DP,3,1);

 

        //显示轮廓图像

   cvNamedWindow("contours",1);

   cvCreateTrackbar("levels+3","contours",&levels,50,on_trackbarContour);

   

   on_trackbarContour(0);

 

   cvWaitKey(0);

 

        //释放空间销毁窗体

        cvReleaseImage(&imgContour);

        cvReleaseImage(&img);

        cvClearSeq(contours);

        cvClearMemStorage(storage);

        cvDestroyWindow("contours");

        cvDestroyWindow("image");

        

}

 

(三)openCV的资源

网络真的很方便,baidu和google上搜一搜就知道了,有很多人已经在使用openCV了。

在这里介绍几个论坛,上面有更多资源可以分享。

一是:

阿须论坛。

置顶的贴子有对OpenCV资源,邮件列表的总介绍。

二是:

机器视觉网、机器视在线以及研学论坛等。

上面也有OpenCV版。

三是:

QQ群,如比较不错的群:

OpenCV(号码17319732)、视觉/图像/博士联盟(20441383)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1