OpenCV的安装.docx
- 文档编号:9045808
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:11
- 大小:18.97KB
OpenCV的安装.docx
《OpenCV的安装.docx》由会员分享,可在线阅读,更多相关《OpenCV的安装.docx(11页珍藏版)》请在冰豆网上搜索。
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;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)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenCV 安装
![提示](https://static.bdocx.com/images/bang_tan.gif)