VC60应用OpenCV 出现的错误及解决办法Word文档下载推荐.docx
《VC60应用OpenCV 出现的错误及解决办法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《VC60应用OpenCV 出现的错误及解决办法Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。
directory
(Win32
error
267)
造成这个错误的原因主要是运行别人的程序时,设置不正确.,工程—>
设置,问题出在右边“调试”标签的“工作目录”和你现在运行工程的目录不一致。
把工作目录中的路径去掉即可。
4.pCapture=cvCaptureFromFile(szVideoFileName);
不能打开AVI视频文件,
网上下载一个“K-LiteCodecPackFull3.9.3Beta”(常用视频播放插件合集),安装以后,程序能顺利打开视频文件。
5.新建工程后,程序编译时报错
Linking...
LoadImage01Dlg.obj:
errorLNK2001:
unresolvedexternalsymbol_cvReleaseImage
unresolvedexternalsymbol_cvDestroyWindow
unresolvedexternalsymbol_cvWaitKey
unresolvedexternalsymbol_cvShowImage
unresolvedexternalsymbol_cvNamedWindow
unresolvedexternalsymbol_cvLoadImage
Debug/LoadImage01.exe:
fatalerrorLNK1120:
6unresolvedexternals
执行link.exe时出错.
工程-》设置-》连接中,添加对象/库模块cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib即可,如下图(需要用到即可加载几个)。
6.图像显示路径问题
if((pImg=cvLoadImage("
E:
\毕业论文相关\VC程序练习201108\LoadImage01\testpic.jpg"
1))==0)
提示警告错误:
warningC4129:
V'
:
unrecognizedcharacterescapesequence
单斜杠变成双斜杠。
(双引号括起来)。
7.编译没错误,运行后出现错误窗口,如下所示:
badflag(parameterorstructurefield)(Unrecognizedorunsupportedarraytype)
while
(1)//!
葉正聖老師教研究生學opencv[程式集訓]>
{image=cvQueryFrame(capture1);
cvSaveImage("
frame0.jpg"
image);
cvShowImage("
TrackingDemo"
"
);
}
图像显示函数中的"
改成image即可。
8.程序运行中,按Esc键,出现错误报警窗口,或者内存释放语句放在图像显示循环语句中,只显示了第一帧就报错。
Unknownerrorcode-49(Deallocationerror)infunctioncvFree_,C:
\User\VP\opencv\cxcore\src\cxalloc.cpp(129)
image=cvQueryFrame(pCapture))返回的图像image用cvReleaseImage释放了!
把语句“cvReleaseImage(&
image);
”去掉。
切记,cvQueryFrame获得的指针千万不能释放!
9.cvCopy和cvCvtColor函数对图像处理后,图像上下变反,倒置了,左右没反。
图像的origin参数变了,设置为1即可,加代码“GrayImage->
origin=1;
”。
原因为cvCreateImage得到的图像文件,其origin都为0,而从摄像头或视频文件中获取的帧图像,其origin都为1.
10.运行完了之后,出现错误报警窗口:
Nullpointer(NULLarraypointerispassed)infunctioncvGetMat,C:
\User\VP\opencv\cxcore\src\cxarray.cpp(2780).
判断是否抓取的最后一帧,若是,image=cvQueryFrame(capture1);
返回的指针为NULL,这时用语句break退出,if(image==NULL)break;
或者,图像格式都初始化一样的,如channel都取1(单通道,灰度图像)。
11.把语句cvSaveImage("
去掉,则出现下面的错误:
Badargument(ArrayshouldbeCvMatorIplImage)infunctioncvGetSize,C:
\User\VP\opencv\cxcore\src\cxarray.cpp(1453).
cvGetSize(image)中image未提前定义大小,把image=cvQueryFrame(capture1);
放在之前即可。
12.加入计算灰度直方图的函数,编译没有错误,运行之后TrackingDemo闪了一下,然后没反应。
调试运行,到函数int*GetGrayhist(IplImage*img)的内部语句inti=ptr[x];
时停止运行,提示警告窗口如下。
“UnhandledexceptioninVideoReadSave.exe:
0xc0000005:
AccessViolation.”
把函数体内两个for循环之内的语句“uchar*ptr=(uchar*)(img->
imageData+y*img->
widthStep);
”放到后一个for语句体内,改成“i=((uchar*)(img->
widthStep))[x];
20120306
13.errorC2679:
binary'
='
nooperatordefinedwhichtakesaright-handoperandoftype'
struct_IplImage*'
(orthereisnoacceptableconversion)
错误指向语句img02=cvCreateImage(cvGetSize(img00),IPL_DEPTH_8U,3);
变量批量定义时,指针“*”容易忘记写,语句:
IplImage*img01,img02;
改成IplImage*img01,*img02;
14.问题描述:
原因:
数组越界,图像的宽和高与矩阵中的(x,y)的区别。
for(inty=0;
y<
img00->
height;
y++)
{
for(intx=0;
x<
width;
x++)
s=cvGet2D(img00,x,y);
//Getthex,y)pixelvalue
x和y顺序对调。
注意,在图像矩阵中,(y,x)表示y行x列的点。
15.errorC2065:
cout'
undeclaredidentifier
errorC2296:
'
illegal,leftoperandhastype'
double'
include中的<
iostream>
没有定义全局命名空间。
要么包含<
iostream.h>
,要么在程序中加usingnamespacestd。
16.“Linking...
nafxcwd.lib(thrdcore.obj):
unresolvedexternalsymbol__endthreadex
unresolvedexternalsymbol__beginthreadex
Debug/临界区.exe:
2unresolvedexternals
临界区.exe-1error(s),0warning(s)”
这是线程同步中遇到的问题,使用CCriticalSection类操作临界区,由于CCriticalSection类是MFC中所定义的临界区类,因此所用的控制台程序的工程必须设置对MFC包含。
点击“工程”菜单,选择“设置”,在“ProjectSettings”对话框中选择“常规”项,在“Microsoft基础类”的下拉菜单中选择“使用MFC作为共享的DLL”,点击“确定”即可。
17.编译时出现错误:
“LINK:
fatalerrorLNK1168:
cannotopenDebug/基于PT转台的视频跟踪软件设计.exeforwriting”
上次运行程序没有关闭,程序还在运行过程中。
到“任务管理器”中,看是否有你编译的程序在运行,强制关闭后,再编译。
18.编写了一个MFC程序,运行后点击一个按钮,界面变成没有响应,.exe文件在Windows任务管理器中也删除不了?
CPTDlg:
OnBTSetVideo()函数中加“初始化视频调节窗口”语句。
19.VC异常处理
问题描述:
工作区内不显示新加的类名(类不显示)
删除.clw和.ncb文件,然后类向导里面加入.clw文件;
或者工程-增加到工程-文件然后选择你的.CPP和.H文件,加入后类窗口中即可显示新类。
20.VC工程:
摄像机读入视频Learning_OpenCV_CH2.cpp
/**从相机中获取图像并进行处理20120326**/
//From:
\毕业论文相关\更新FilterResearch\OpenCV\LearningOpenCV_Code\ch2_ex2_9.cpp
编译时,出现DebugError!
abnormalprogramtermination。
Abnormalprogramtermination程序异常终止。
通常是由于内存使用不当所致
目前还没有解决,考虑是否因为帧频间隔时间和cvWaitKey(n)中的n不一致所致?
或者图像缓存的空间设置问题等?
?
21.为了//加载位图改变界面背景20120328<
VC之美化界面篇。
.pdf>
,在CPTDlg的构造函数中加CDC*pDC=GetDC();
pDC定义的位置得改变。
pDC=GetDC();
放入函数BOOLCPTDlg:
OnEraseBkgnd(CDC*pDC)
还是不能加载图片到对话框界面上!
22.问题描述:
基于PT转台的视频跟踪软件设计Dlg.obj:
unresolvedexternalsymbol_cvCreateImage
除了gt400.libDrawUtil.libRaw2Rgb.libIEUCap.lib文件外,工程->
设置->
连接->
对象/库模块中添加所需的OpenCV库文件如下图所示,
cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib
23.
添加类型转换函数GetIplFromBmp,然后在窗口显示,调试没有问题,运行后出现下列错误OpenCV GUI ErrorHandler:
Oneofarguments’valuesisoutofrange(NegativeortoolargeargumentofcvAllocfunction)infunctioncvAlloc,C:
\User\VP\opencv\cxcore\src\cxalloc.cpp(106)
分析:
cxalloc.cpp文件中
r105if((size_t)size>
CV_MAX_ALLOC_SIZE)
r106CV_ERROR(CV_StsOutOfRange,
r107"
NegativeortoolargeargumentofcvAllocfunction"
);
单步调试运行,出现下列错误Unhandledexceptionin….exe(MSVCRTD.DLL):
0xC0000005:
AccessViolation.
由于使用了别人提供的由BMP转换为IplImage的类型转换函数GetIplFromBmp,建议使用OpenCV自带的cvSetData函数(From《OpenCV例程说明》),见问题25。
24.20120406
把IEU_MSG消息处理函数IEUMsgProc中的语句cvNamedWindow("
图像显示"
1);
Iimage);
注释掉,出现下面错误。
OpenCV GUI ErrorHandler:
Unknownerrorcode-25(Badinputroi)infunctioncvInitImageHeader,C:
\User\VP\opencv\cxcore\src\cxarray.cpp(3363)
R3362if(size.width<
0||size.height<
0)
R3363CV_ERROR(CV_BadROISize,"
Badinputroi"
把Iimage=GetIplFromBmp(m_pDataBuf);
注释掉,程序正常运行,图像显示窗口也出现,只是没有Iimage图像而已。
25.
//From<
OpenCV例程说明>
CvSizecvSize;
cvSize.width=m_nImageWidth;
cvSize.height=m_nImageHeight;
IplImage*iplImage=cvCreateImageHeader(cvSize,IPL_DEPTH_8U,1);
消息处理函数的循环体内加语句cvSetData(iplImage,m_pDataBuf,m_nImageWidth);
调试没问题,运行后出现了显示图像的窗口,但出现下列错误
r127CVStatusstatus=p_cvFree(ptr,p_cvAllocUserData);
r128if(status<
r129CV_ERROR(status,"
Deallocationerror"
参见上面的问题8,把cvReleaseImage(&
iplImage);
注释掉即可。
26.
e:
\毕业论文相关\vc程序练习201108\ch10ex102学习opencv\ch10ex102学习opencv.cpp(132):
fatalerrorC1010:
unexpectedendoffilewhilelookingforprecompiledheaderdirectivecvx_defs.cpp
\毕业论文相关\vc程序练习201108\ch10ex102学习opencv\cvx_defs.cpp(41):
unexpectedendoffilewhilelookingforprecompiledheaderdirectiveGeneratingCode...
并且光标指向两个文件的末尾处。
“可能原因为工程中stdafx.h未包含。
//
在VC6.0中编译c++程序时报该错原因为需要一个预编译的文件stdafx.h,如果不需要编译该头文件的话,只需要打开seting页面设置中在c/c++栏,选择PreCompiledheaders,然后设置第一选项,选择不使用预编译头,解决这个问题。
”
工程-》设置-》C/C++,在分类中选择“预编译的头文件”,在下面的选项中选择第一个“不使用预补偿页眉”,确定即可。
27.帧间差分图像是有拖影的图像《VC工程:
Camshift目标跟踪-边缘检测》
hue为每帧图像转化成了的灰度图像,
if(icount==2)//判断是否第一帧(之前定义了inticount=1)
{
cvCopy(hue,image1,NULL);
//是第一帧则把它复制到image1中
cvCopy(hue,image2,NULL);
//把每帧的灰度图像复制到image2中
cvAbsDiff(image1,image2,hue);
//当前帧减去上一帧,保存在hue中
//注意,若是第一帧,则是自身相减
循环后面加得到上一帧图像的语句,即把当前帧作为下一帧的前一帧
cvCopy(hue,image1,NULL);
此时hue为差分后的图像,而不是原始图像,故出现疑似拖尾现象。
hue改成image2。
28.errorC2064:
termdoesnotevaluatetoafunction;
指向程序语句:
histimg=cvCreateImage(cvSize(320,200),8,3);
存在函数未被定义或者重复定义!
仔细检查,cvSize是opencv的函数,获得CvSize类型,cvCreateImage也是opencv的函数,搜索cvSize,发现之前有一条语句“CvSizecvSize;
”,把函数cvSize定义成了变量,把它改成cvsize,编译通过。
后记:
定义变量时,一定要避开相关关键字和函数名,切记!
29.OpenCVGUIErrorHandler:
Formatsofinputargumentsdonotmatch()infunctioncvCopy
cvCopy(iplImage,image,0);
中的iplImage之前定义为一通道的(灰度图像),而image为三通道的(彩色图像),格式不匹配。
把IplImage定义为3通道的,然后点击“打开相机”,出现下面错误:
Imagestepiswrong()infunctioncvSetData,
把image改成单通道的(灰度图像)?
变成处理黑白图像?
//20120421把m_pDataBuf换成m_pRgbBuf(彩色图像数据),并且之前的CreateImage通道为3
cvSetData(iplImage,m_pRgbBuf,m_nImageWidth*3);
//末尾参数应该乘以3!
30.Linking...
LINK:
fatalerrorLNK1168:
cannotopenDebug/基于PT转台的视频跟踪软件设计.exeforwriting
.exe程序正在运行,不能重写。
在任务管理器中,把进程.exe关掉!
31.
errorC2664:
cvSetMouseCallback'
cannotconvertparameter2from'
void(int,int,int,int,void*)'
to'
void(__cdecl*)(int,int,int,int,void*)
Noneofthefunctionswiththisnameinscopematchthetargettype
将on_mouse函数定义成静态函数static。
接着出现以下错误:
errorC2597:
illegalreferencetodatamember'
select_object'
inastaticmemberfunction
静态函数要访问类的非静态成员,需做以下处理
MylplClass*temp=(MylplClass*)param;
switch(event){
caseCV_EVENT_MOUSEMOVE:
temp->
a=...;
b=...;
......}
......}
32.
点击调试
?
33.
cvNamedWindow("
帧差后的图像iplImage3"
cvShowImage("
iplImage3);
运行后图像窗口一直在闪烁!
把窗口名字中的iplImage3去掉即可正常显示。
或者改成其它的,不用图像变量iplImage3即可,猜测可能是窗口名字与变量冲突!
cvDestroyWindow的缘故?
34.
cvSaveImage(szSaveName,iplImage4);
出错?
图片保存的文件名应该指明图片格式,在此,应该给szSaveName添加.jpg字符,代码如下:
char*last_name="
.jpg"
;
strcat(szSaveName,last_name);