vs中安装opencv22.docx
- 文档编号:6740927
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:12
- 大小:93.08KB
vs中安装opencv22.docx
《vs中安装opencv22.docx》由会员分享,可在线阅读,更多相关《vs中安装opencv22.docx(12页珍藏版)》请在冰点文库上搜索。
vs中安装opencv22
一.VS2008完整版中安装opencv2.2
1…解压opencv2.2(下载的不是2010的专用版本,而是windows的普通版)到指定目录C:
\ProgramFiles\OpenCV2.2
2.用CMake导出VC++项目文件
(1)运行cmake-gui,设置路径为OpenCV安装路径(本文档假定安装位置为:
D:
\ProgramFiles\OpenCV2.2),并创建子目录D:
\ProgramFiles\OpenCV2.2\vc2008,用于存放编译结果。
(2)然后点configure,在弹出的对话框内选择VisualStudio92008。
(3)再次选择“Congfigure”,完成后选择“Generate”。
3.编译OpenCVDebug和Release版本库
完成上一步骤后,将在C:
\ProgramFiles\OpenCV2.2\vc2008目录下生成OpenCV.sln的VCSolutionFile,请用VC++2008打开OpenCV.sln,然后执行如下操作:
(1)在Debug下,选择SolutionExplorer里的SolutionOpenCV,点右键,运行"RebuildSolution";如编译无错误,再选择INSTALL项目,运行"Build"。
(2)在Release下,选择SolutionExplorer里的SolutionOpenCV,点右键,运行"RebuildSolution";如编译无错误,再选择INSTALL项目,运行"Build"。
此时,OpenCV的*d.dll文件(fordebug)和*.dll文件(forrelease)将出现在C:
\ProgramFiles\OpenCV2.2\vc2008\bin目录中;OpenCV的*d.lib文件(fordebug)和*.lib文件(forrelease)将出现在C:
\ProgramFiles\OpenCV2.2\vc2008\lib目录;头文件*.h出现在C:
\ProgramFiles\OpenCV2.2\vc2008\include\opencv中。
可以被VC++2008调用的OpenCV动态库生成完毕。
4.配置Windows环境变量Path
将C:
\ProgramFiles\OpenCV2.2\vc2008\bin加入Windows系统环境变量Path中。
加入后可能需要注销当前Windows用户(或重启)后重新登陆才生效。
5.为VC++2008配置OpenCV环境
打开VC++2008,菜单Tools->Options->ProjectsandSolutions->VC++Directories
(1)Showdirectoriesfor选择executablefiles,加入目录C:
\ProgramFiles\OpenCV2.2\vc2008\bin
(2)Showdirectoriesfor选择includefiles,加入目录
c:
\ProgramFiles\OpenCV2.2\vs2008\include
c:
\ProgramFiles\OpenCV2.2\vc2008\include\opencv
(3)Showdirectoriesfor选择libraryfiles,加入目录c:
\ProgramFiles\OpenCV2.2\vc2008\lib
关闭VC++2008。
6.使用OpenCV2.2编程
打开VC++2008Express,创建一个Win32控制台程序opencvhello;
选择SolutionExplorer里的opencvhello项目,点击鼠标右键,选择Properties,在[链接器LINKER]的[输入INPUT]中,
为项目的Debug配置增加[依赖的库AdditionalDependencies]:
opencv_core220d.libopencv_imgproc220d.libopencv_highgui220d.lib
为项目的Release配置增加[依赖的库AdditionalDependencies]:
opencv_core220.libopencv_imgproc220.libopencv_highgui220.lib
在[配置属性ConfigurationProperties]-[General]-[字符集CharacterSet]修改为使用“多字节字符集”(由于2008默认是以Unicode字符集编译的)
编译运行下面的例程(需要将lena.jpg文件放在项目目录下)。
/***********************************************************************
*OpenCV2.0测试例程
*于仕琪提供
***********************************************************************/
#include"stdafx.h"
#include"highgui.h"
//所有的以新风格命名的函数都在cv命名空间中
//如果希望不要每次都输入cv:
:
,则可使用下面语句
//usingnamespacecv;
int_tmain(intargc,_TCHAR*argv[])
{
constchar*imagename="lena.jpg";
cv:
:
Matimg=cv:
:
imread(imagename);//Matlab风格的cvLoadImage函数的另一种调用
if(img.empty())
{
fprintf(stderr,"Cannotloadimage%s\n",imagename);
return-1;
}
if(!
img.data)//检查是否正确载入图像
return-1;
cv:
:
namedWindow("image",CV_WINDOW_AUTOSIZE);//创建窗口
cv:
:
imshow("image",img);//显示图像
cv:
:
waitKey();
return0;
}
二、opencv2.2中CImage不可用的解决办法
参看:
OpenCV2.2里CvvImage类被取消,如果想继续沿用以前的CvvImage,其实很简单,只要搜到CvvImage的源代码(.h和.cpp)。
在自己的工程里面增加一个新的CvvImage类就可以了。
然后注意在view类头上加个#include"CvvImage.h"
下面是CvvImage源码,摘自老的版本。
CvvImage.h
//------------------------------------------------------------------------------------------------
#pragmaonce
#ifndefCVVIMAGE_CLASS_DEF
#defineCVVIMAGE_CLASS_DEF
#include"opencv2/highgui/highgui.hpp"
#include"opencv2/core/core.hpp"
#include"opencv2/imgproc/imgproc.hpp"
#include"opencv2/imgproc/imgproc_c.h"
class CvvImage
{
public:
CvvImage();
virtual~CvvImage();
virtualbool Create(intwidth,intheight,intbits_per_pixel,intimage_origin=0);
virtualbool Load(constchar*filename,intdesired_color=1);
virtualbool LoadRect(constchar*filename,
intdesired_color,CvRectr);
#ifdefinedWIN32||defined_WIN32
virtualbool LoadRect(constchar*filename,
intdesired_color,RECTr)
{
returnLoadRect(filename,desired_color,
cvRect(r.left,r.top,r.right-r.left,r.bottom-r.top));
}
#endif
virtualbool Save(constchar*filename);
virtualvoid CopyOf(CvvImage&image,intdesired_color=-1);
virtualvoid CopyOf(IplImage*img,intdesired_color=-1);
IplImage*GetImage(){returnm_img;};
virtualvoid Destroy(void);
intWidth(){return!
m_img?
0:
!
m_img->roi?
m_img->width:
m_img->roi->width;};
intHeight(){return!
m_img?
0:
!
m_img->roi?
m_img->height:
m_img->roi->height;};
intBpp(){returnm_img?
(m_img->depth&255)*m_img->nChannels:
0;};
virtualvoid Fill(intcolor);
virtualvoid Show(constchar*window);
#ifdefinedWIN32||defined_WIN32
virtualvoid Show(HDCdc,intx,inty,intwidth,intheight,
intfrom_x=0,intfrom_y=0);
virtualvoid DrawToHDC(HDChDCDst,RECT*pDstRect);
#endif
protected:
IplImage* m_img;
};
typedefCvvImageCImage;
#endif
//---------------------------------------------------------------
CvvImage.cpp
//------------------------------------------------------------------------------------------------
#include"StdAfx.h"
#include"CvvImage.h"
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
CV_INLINERECTNormalizeRect(RECTr);
CV_INLINERECTNormalizeRect(RECTr)
{
intt;
if(r.left>r.right)
{
t=r.left;
r.left=r.right;
r.right=t;
}
if(r.top>r.bottom)
{
t=r.top;
r.top=r.bottom;
r.bottom=t;
}
returnr;
}
CV_INLINECvRectRectToCvRect(RECTsr);
CV_INLINECvRectRectToCvRect(RECTsr)
{
sr=NormalizeRect(sr);
returncvRect(sr.left,sr.top,sr.right-sr.left,sr.bottom-sr.top);
}
CV_INLINERECTCvRectToRect(CvRectsr);
CV_INLINERECTCvRectToRect(CvRectsr)
{
RECTdr;
dr.left=sr.x;
dr.top=sr.y;
dr.right=sr.x+sr.width;
dr.bottom=sr.y+sr.height;
returndr;
}
CV_INLINEIplROIRectToROI(RECTr);
CV_INLINEIplROIRectToROI(RECTr)
{
IplROIroi;
r=NormalizeRect(r);
roi.xOffset=r.left;
roi.yOffset=r.top;
roi.width=r.right-r.left;
roi.height=r.bottom-r.top;
roi.coi=0;
returnroi;
}
void FillBitmapInfo(BITMAPINFO*bmi,intwidth,intheight,intbpp,intorigin)
{
assert(bmi&&width>=0&&height>=0&&(bpp==8||bpp==24||bpp==32));
BITMAPINFOHEADER*bmih=&(bmi->bmiHeader);
memset(bmih,0,sizeof(*bmih));
bmih->biSize=sizeof(BITMAPINFOHEADER);
bmih->biWidth=width;
bmih->biHeight=origin?
abs(height):
-abs(height);
bmih->biPlanes=1;
bmih->biBitCount=(unsignedshort)bpp;
bmih->biCompression=BI_RGB;
if(bpp==8)
{
RGBQUAD*palette=bmi->bmiColors;
inti;
for(i=0;i<256;i++)
{
palette[i].rgbBlue=palette[i].rgbGreen=palette[i].rgbRed=(BYTE)i;
palette[i].rgbReserved=0;
}
}
}
CvvImage:
:
CvvImage()
{
m_img=0;
}
voidCvvImage:
:
Destroy()
{
cvReleaseImage(&m_img);
}
CvvImage:
:
~CvvImage()
{
Destroy();
}
bool CvvImage:
:
Create(intw,inth,intbpp,intorigin)
{
constunsignedmax_img_size=10000;
if((bpp!
=8&&bpp!
=24&&bpp!
=32)||
(unsigned)w>= max_img_size||(unsigned)h>=max_img_size||
(origin!
=IPL_ORIGIN_TL&&origin!
=IPL_ORIGIN_BL))
{
assert(0);//mostprobably,itisaprogrammingerror
returnfalse;
}
if(!
m_img||Bpp()!
=bpp||m_img->width!
=w||m_img->height!
=h)
{
if(m_img&&m_img->nSize==sizeof(IplImage))
Destroy();
m_img=cvCreateImage(cvSize(w,h),IPL_DEPTH_8U,bpp/8);
}
if(m_img)
m_img->origin=origin==0?
IPL_ORIGIN_TL:
IPL_ORIGIN_BL;
returnm_img!
=0;
}
void CvvImage:
:
CopyOf(CvvImage&image,intdesired_color)
{
IplImage*img=image.GetImage();
if(img)
{
CopyOf(img,desired_color);
}
}
#defineHG_IS_IMAGE(img) \
((img)!
=0&&((constIplImage*)(img))->nSize==sizeof(IplImage)&&\
((IplImage*)img)->imageData!
=0)
void CvvImage:
:
CopyOf(IplImage*img,intdesired_color)
{
if(HG_IS_IMAGE(img))
{
intcolor=desired_color;
CvSizesize=cvGetSize(img);
if(color<0)
color=img->nChannels>1;
if(Create(size.width,size.height,
(!
color?
1:
img->nChannels>1?
img->nChannels:
3)*8,
img->origin))
{
cvConvertImage(img,m_img,0);
}
}
}
bool CvvImage:
:
Load(constchar*filename,intdesired_color)
{
IplImage*img=cvLoadImage(filename,desired_color);
if(!
img)
returnfalse;
CopyOf(img,desired_color);
cvReleaseImage(&img);
returntrue;
}
bool CvvImage:
:
LoadRect(constchar*filename,
intdesired_color,CvRectr)
{
if(r.width<0||r.height<0)returnfalse;
IplImage*img=cvLoadImage(filename,desired_color);
if(!
img)
returnfalse;
if(r.width==0||r.height==0)
{
r.width=img->width;
r.height=img->height;
r.x=r.y=0;
}
if(r.x>img->width||r.y>img->height||
r.x+r.width<0||r.y+r.height<0)
{
cvReleaseImage(&img);
returnfalse;
}
if(r.x<0)
{
r.width+=r.x;
r.x=0;
}
if(r.y<0)
{
r.height+=r.y;
r.y=0;
}
if(r.x+r.width>img->width)
r.width=img->width-r.x;
if(r.y+r.height>img->height)
r.height=img->height-r.y;
cvSetImageROI(img,r);
CopyOf(img,desired_color);
cvReleaseImage(&img);
returntrue;
}
bool CvvImage:
:
Save(constchar*filename)
{
if(!
m_img)
returnfalse;
cvSaveImage(filename,m_img);
returntrue;
}
void CvvImage:
:
Show(constchar*window)
{
if(m_img)
cvShowImage(window,m_img);
}
void CvvImage:
:
Show(HDCdc,intx,inty,intw,inth,intfrom_x,intfrom_y)
{
if(m_img&&m_img->depth==IPL_DEPTH_8U)
{
ucharbuffer[sizeof(BITMAPINFOHEADER)+1024];
BITMAPINFO*bmi=(BITMAPINFO*)buffer;
intbmp_w=m_img-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vs 安装 opencv22