OpenCV的安装Word下载.docx
《OpenCV的安装Word下载.docx》由会员分享,可在线阅读,更多相关《OpenCV的安装Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
对于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
//初始化,分配空间
//浮点格式
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);
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<
cornerCount;
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("
srcImg1);
//销毁窗体
cvDestroyWindow("
);
//释放空间
eigImage1);
tempImage1);
smoothImg1);
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->
=1)
cvCvtColor(img,gray,CV_BGR2GRAY);
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<
circles->
total;
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"
//画像表示
cvShowImage("
img);
//等待按键
//释放
img);
gray);
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));
//显示轮廓图像
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->
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);
//创建窗体显示要操作的图像
image"
1);
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);
cvCreateTrackbar("
levels+3"
"
&
levels,50,on_trackbarContour);
on_trackbarContour(0);
//释放空间销毁窗体
imgContour);
cvClearSeq(contours);
cvClearMemStorage(storage);
(三)openCV的资源
网络真的很方便,baidu和google上搜一搜就知道了,有很多人已经在使用openCV了。
在这里介绍几个论坛,上面有更多资源可以分享。
一是:
阿须论坛。
置顶的贴子有对OpenCV资源,邮件列表的总介绍。
二是:
机器视觉网、机器视在线以及研学论坛等。
上面也有OpenCV版。
三是:
QQ群,如比较不错的群:
OpenCV(号码17319732)、视觉/图像/博士联盟(20441383)