1、OpenCV的安装(一) openCV的安装1. 下载最新版 openCV Beta 5, 网址为 color=#8000802. 下载完毕后直接点击安装。安装完毕后打开 _make文件夹下的.dsw(vc6)或.sln(),点击project下的batch build,注意你的机子是32位的话,选重所有的win32Debug 和 Release(不要选择64位的),点击 Rebuild。这样,所需要的库文件就生成了。下一步,要建你自己的文件。(PS:openCV Beta 5有一个bug,建立的时候需要改一个注释注错了的文件)3. 打开vc6或,新建一工程(win32console, win
2、32project, MFC都可以,取决于你的习惯)4. 配置你自己的工程对于vc6: project settings all configurations C/C+标签Category中选择Prepreocessor Additional include directories项,输入以“,”分开的相对路径(注意相对路径的格式与你的openCV文件夹与你的工程文件夹相对位置有关),如我的工程建立在OpenCV的目录下,则我可以这样设置相对路径: .cvauxinclude,.cxcoreinclude,.cvinclude,.otherlibshighgui, .otherlibscvca
3、minclude ; 当然,也可以输入绝对路径如 C:Program FilesOpenCVcvincludeLink标签 Category中选择General Object/library modules, 输入以空格分开的cvd.lib highguid.lib cvauxd.lib cxcored.lib cvcamd.libLink标签 Category中选择Input Object/library modules, 输入以空格分开的cvd.lib highguid.lib cvauxd.lib cxcored.lib cvcamd.libLink标签 Category中选择Input
4、 Additional Library path, 输入包含lib库的相对路径或绝对路径,我的工程相对路径设置为 .lib设置完以上点击确定。对于V: projectpropertiesall configurationsC/C+Additional Include Directories 每行分开的相对路径或绝对路径,如我的工程里这样设置.cvinclude .cvauxinclude .highguiinclude .otherlibshighgui .otherlibscvcamincludeLinker General Additional library directories: .
5、libLinkerInputAdditional Dependencies: cv.lib cxcore.lib cvaux.lib cvcam.lib highgui.lib (每行一个)设置完以上点击确定。5加入openCV的工程到你的工程里并设置依赖关系 vc6: ProjectInsert project into workspace cvcv.dsp同样加入cvaux.dsp, cxcore.dsp, highgui.dspProjectDependencies: cv选择cxcore; cvaux选择cv,cxcore; highgui选择cxcore; 你的工程选择所有 V Fi
6、leAdd project Existing projectcvcv.vcproj同样加入cvaux.vcproj, cxcore.vcproj, highgui.vcproj在Solution Explorer中,鼠标右击 Solution your project (5 projects)properties中设置依赖关同,同vc6(二)openCV简单使用入门这样就配置成功了,你可以使用openCV里。下面简单介绍一些openCV简单的图像操作的例子。帮助初学者入门。在使用时,只要把头文件包括进来就可以直接使用了。#include “cv.h” #include “highgui.h”
7、(具体每个库中的内容,可参阅openCV手册)1 打开图像 /打开图像文件,成功返回IplImage*图像指针,否则返回NULL/.IplImage* WINAPI imgFileOpen() IplImage* pImg = 0; /声明IplImage指针 CString fileName = ; /窗口对话窗体的文件属性 static char szFilter = 图像文件格式(*.bmp) |*.bmp|JPG file format (*.jpg)|*.jpg|TIF file format(*.tif) |*.tif|; /打开文件对话窗口 CFileDialog OpenDlg
8、( TRUE, NULL, NULL/*LastFilePath*/, OFN_HIDEREADONLY | OFN_EXPLORER, szFilter, NULL ); OpenDlg.m_ofn.lpstrTitle = Open BMP,JPG and TIF Files; /从文件对话窗口中打开图像 if(OpenDlg.DoModal()=IDOK) fileName = OpenDlg.GetPathName(); /获得文件名 else return NULL; /图像文件成功打开 pImg = cvLoadImage(fileName, 0); /返回 return pImg
9、;2. 如果把上面打开的图像显示出来,则可以这样调用: IplImage* pOpenImg = imgFileOpen(); /打开图像 Cstring srcWinLabel = “source image”;/窗体title if(pOpenImg)/如果成功打开则显示 cvNamedWindow(srcWinLabel, 1); /创建窗体 cvShowImage(srcWinLabel, pOpenImg); /显示图像 cvWaitKey(0); /等待按键 cvReleaseImage(&pOpenImg); cvDestroyWindow( srcWinLabel );/销毁窗
10、口 3. 一些常用操作如角点检测:BOOL WINAPI FindCorner(IplImage* srcImg1, double qualityLevel, double minDistance) /定义循环变得与检测角点数量 int i, cornerCount = max_corners; /定义IplImage指针图像 IplImage* eigImage1 = 0; IplImage* tempImage1 = 0; IplImage* smoothImg1 = 0; IplImage* grayImg1 = 0; /初始化,分配空间 /浮点格式 eigImage1 = cvCrea
11、teImage(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
12、(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,
13、 0); /子像素极角点 cvFindCornerSubPix(smoothImg1, corners, cornerCount, cvSize(5,5), cvSize(-1,-1), cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 100, 0.1) ); / draw circles at each corner location in the gray image and / print out a list the corners 画出所有角点 if(cornerCount 0) for (i=0; inChannels != 1)
14、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-heig
15、ht/4, 250, 55 ); / 画出识别出的圆 int i; for( i = 0; i total; i+ ) float* p = (float*)cvGetSeqElem( circles, i ); cvCircle( img, cvPoint(cvRound(p0),cvRound(p1), cvRound(p2), CV_RGB(255,0,0), 3, 8, 0 ); / cvCircle( img, cvPoint(cvRound(p0),cvRound(p1), 100, CV_RGB(255,0,0), 3, 8, 0 ); / 窗体显示 cvNamedWindow(
16、Win, 1); / 画像表示 cvShowImage(Win, img); / 等待按键 cvWaitKey(0); / 释放 cvReleaseImage(&img); cvReleaseImage(&gray); cvDestroyWindow(Win); return TRUE;5. 再比如轮廓检测/求轮廓/int levels = 3; /CvSeq* contours = 0; /IplImage* imgContour; /int upper = 80;int lower = 10;CvMemStorage * storageContours;void on_trackbarCo
17、ntour(int pos) /定义变量 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, cvPoin
18、t(0,0) ); /显示轮廓图像 cvShowImage( contours, cnt_img ); /释放空间 cvReleaseImage( &cnt_img ); void WINAPI findContour( IplImage* pImg ) /定义指针变量 CvMemStorage* storage; IplImage* img; /初始化分配空间 storage = cvCreateMemStorage(0); img = cvCreateImage( cvGetSize(pImg), IPL_DEPTH_8U, 1 ); imgContour = cvCreateImage(
19、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_
20、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) ); / comment this out if you do not want approximation contours =
21、 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