OpenCV入门小问题.docx
- 文档编号:3771949
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:16
- 大小:20.26KB
OpenCV入门小问题.docx
《OpenCV入门小问题.docx》由会员分享,可在线阅读,更多相关《OpenCV入门小问题.docx(16页珍藏版)》请在冰豆网上搜索。
OpenCV入门小问题
安装和配置OpenCV
1.安装OpenCV1.0(因为VC++6.0只与OpenCV1.0兼容,更高版本的OpenCV不兼容);
2.检查C:
\ProgramFiles\OpenCV\bin是否已经被加入到环境变量PATH,如果没有,请加入。
加入后需要注销当前Windows用户(或重启)后重新登陆才生效。
(可以在任务管理器里重启explorer.exe)
3.配置VisualC++6.0
1.全局设置:
菜单Tools->Options->Directories:
先设置lib路径,选择Libraryfiles,在下方填入路径:
C:
\ProgramFiles\OpenCV\lib
然后选择includefiles,在下方填入路径:
C:
\ProgramFiles\OpenCV\cxcore\include
C:
\ProgramFiles\OpenCV\cv\include
C:
\ProgramFiles\OpenCV\cvaux\include
C:
\ProgramFiles\OpenCV\ml\include
C:
\ProgramFiles\OpenCV\otherlibs\highgui
C:
\ProgramFiles\OpenCV\otherlibs\cvcam\include
然后选择sourcefiles,在下方填入路径:
C:
\ProgramFiles\OpenCV\cv\src
C:
\ProgramFiles\OpenCV\cxcore\src
C:
\ProgramFiles\OpenCV\cvaux\src
C:
\ProgramFiles\OpenCV\otherlibs\highgui
C:
\ProgramFiles\OpenCV\otherlibs\cvcam\src\windows
最后点击“ok”,完成设置。
2.项目设置:
每创建一个将要使用OpenCV的VCProject,都需要给它指定需要的lib。
菜单:
Project->Settings,然后将Settingfor选为AllConfigurations(虽然这里选择了AllConfiguration,但是我在后期建立新的工程的时候会出现没有包含头文件的提示,做笨的办法就是在每一次创建新的工程的时候把以下内容加上),然后选择右边的link标签,在Object/librarymodules附加上:
cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib
如果你不需要这么多lib,你可以只添加你需要的lib。
Highgui.h与CvvImage类的问题:
编写代码的时候最好都加上#include”highgui.h”和#include”cv.h”,否则CvvImage类会无法使用,OpenCV2.2.0以上版本都取消了CvvImage类,需要自己添加类。
附:
CvvImage类:
头文件CvvImage.h
#pragmaonce
#ifndefCVVIMAGE_CLASS_DEF
#defineCVVIMAGE_CLASS_DEF
#include"cv.h"
#include"highgui.h"
/*CvvImageclassdefinition*/
classCvvImage
{
public:
CvvImage();
virtual~CvvImage();
/*Createimage(BGRorgrayscale)*/
virtualboolCreate(intwidth,intheight,intbits_per_pixel,intimage_origin=0);
/*Loadimagefromspecifiedfile*/
virtualboolLoad(constchar*filename,intdesired_color=1);
/*Loadrectanglefromthefile*/
virtualboolLoadRect(constchar*filename,
intdesired_color,CvRectr);
#ifdefinedWIN32||defined_WIN32
virtualboolLoadRect(constchar*filename,
intdesired_color,RECTr)
{
returnLoadRect(filename,desired_color,
cvRect(r.left,r.top,r.right-r.left,r.bottom-r.top));
}
#endif
/*Saveentireimagetospecifiedfile.*/
virtualboolSave(constchar*filename);
/*GetcopyofinputimageROI*/
virtualvoidCopyOf(CvvImage&image,intdesired_color=-1);
virtualvoidCopyOf(IplImage*img,intdesired_color=-1);
IplImage*GetImage(){returnm_img;};
virtualvoidDestroy(void);
/*widthandheightofROI*/
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;};
virtualvoidFill(intcolor);
/*drawtohighguiwindow*/
virtualvoidShow(constchar*window);
#ifdefinedWIN32||defined_WIN32
/*drawpartofimagetothespecifiedDC*/
virtualvoidShow(HDCdc,intx,inty,intwidth,intheight,
intfrom_x=0,intfrom_y=0);
/*drawthecurrentimageROItothespecifiedrectangleofthedestinationDC*/
virtualvoidDrawToHDC(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;
}
voidFillBitmapInfo(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();
}
boolCvvImage:
:
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();
/*prepareIPLheader*/
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;
}
voidCvvImage:
:
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)
voidCvvImage:
:
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);
}
}
}
boolCvvImage:
:
Load(constchar*filename,intdesired_color)
{
IplImage*img=cvLoadImage(filename,desired_color);
if(!
img)
returnfalse;
CopyOf(img,desired_color);
cvReleaseImage(&img);
returntrue;
}
boolCvvImage:
:
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;
}
/*truncatertosourceimage*/
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;
}
boolCvvImage:
:
Save(constchar*filename)
{
if(!
m_img)
returnfalse;
cvSaveImage(filename,m_img);
returntrue;
}
voidCvvImage:
:
Show(constchar*window)
{
if(m_img)
cvShowImage(window,m_img);
}
voidCvvImage:
:
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->width,bmp_h=m_img->height;
FillBitmapInfo(bmi,bmp_w,bmp_h,Bpp(),m_img->origin);
from_x=MIN(MAX(from_x,0),bmp_w-1);
from_y=MIN(MAX(from_y,0),bmp_h-1);
intsw=MAX(MIN(bmp_w-from_x,w),0);
intsh=MAX(MIN(bmp_h-from_y,h),0);
SetDIBitsToDevice(
dc,x,y,sw,sh,from_x,from_y,from_y,sh,
m_img->imageData+from_y*m_img->widthStep,
bmi,DIB_RGB_COLORS);
}
}
voidCvvImage:
:
DrawToHDC(HDChDCDst,RECT*pDstRect)
{
if(pDstRect&&m_img&&m_img->depth==IPL_DEPTH_8U&&m_img->imageData)
{
ucharbuffer[sizeof(BITMAPINFOHEADER)+1024];
BITMAPINFO*bmi=(BITMAPINFO*)buffer;
intbmp_w=m_img->width,bmp_h=m_img->height;
CvRectroi=cvGetImageROI(m_img);
CvRectdst=RectToCvRect(*pDstRect);
if(roi.width==dst.width&&roi.height==dst.height)
{
Show(hDCDst,dst.x,dst.y,dst.width,dst.height,roi.x,roi.y);
return;
}
if(roi.width>dst.width)
{
SetStretchBltMode(
hDCDst,//handletodevicecontext
HALFTONE);
}
else
{
SetStretchBltMode(
hDCDst,//handletodevicecontext
COLORONCOLOR);
}
FillBitmapInfo(bmi,bmp_w,bmp_h,Bpp(),m_img->origin);
:
:
StretchDIBits(
hDCDst,
dst.x,dst.y,dst.width,dst.height,
roi.x,roi.y,roi.width,roi.height,
m_img->imageData,bmi,DIB_RGB_COLORS,SRCCOPY);
}
}
voidCvvImage:
:
Fill(intcolor)
{
cvSet(m_img,cvScalar(color&255,(color>>8)&255,(color>>16)&255,(color>>24)&255));
}
如何通过摄像头获取视频:
1.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenCV 入门 问题