opencv调试出错: 0x75cd9673处有未经处理的异常:MicrosoftC++异常:内存位置0x0024de90处的cv::Exception
程序如下:#include<stdio.h>#include<highgui.h>#include<cxcore.h>intmain(){IplImage*a,*b,*c...
程序如下:
#include <stdio.h>
#include <highgui.h>
#include <cxcore.h>
int main()
{
IplImage *a,*b,*c,*e;
CvMat d;
b = cvLoadImage("D:/FPGA/FACE/ORL/s01/1.pgm",CV_LOAD_IMAGE_UNCHANGED);
a = cvCreateImage(cvSize(92,112),IPL_DEPTH_8U,1);
c = cvCreateImage(cvSize(112,92),IPL_DEPTH_8U,1);
cvSet(a,cvScalar(255,255,255,255),NULL);
cvSub(a,b,a,NULL);
cvTranspose(a,c);
cvReshape(c,&d,1,46);
cvGetImage(&d,c);
e = cvCreateImage(cvSize(224,224),IPL_DEPTH_8U,1);
cvSet(e,cvScalar(0,0,0,0),NULL);
cvGEMM(c,e,1,NULL,0,c,0);
cvNamedWindow("test",1);
cvShowImage("test",c);
cvWaitKey(0);
cvReleaseImage(&b);
cvReleaseImage(&a);
cvReleaseImage(&c);
cvReleaseImage(&e);
cvDestroyWindow("test");
return 0;
}
我觉得应该是cvGEMM函数处出错了,但是我不知道怎么解决这个问题。本人刚开始接触opencv,希望各位高手帮帮忙,我的分不多,谢谢啊! 展开
#include <stdio.h>
#include <highgui.h>
#include <cxcore.h>
int main()
{
IplImage *a,*b,*c,*e;
CvMat d;
b = cvLoadImage("D:/FPGA/FACE/ORL/s01/1.pgm",CV_LOAD_IMAGE_UNCHANGED);
a = cvCreateImage(cvSize(92,112),IPL_DEPTH_8U,1);
c = cvCreateImage(cvSize(112,92),IPL_DEPTH_8U,1);
cvSet(a,cvScalar(255,255,255,255),NULL);
cvSub(a,b,a,NULL);
cvTranspose(a,c);
cvReshape(c,&d,1,46);
cvGetImage(&d,c);
e = cvCreateImage(cvSize(224,224),IPL_DEPTH_8U,1);
cvSet(e,cvScalar(0,0,0,0),NULL);
cvGEMM(c,e,1,NULL,0,c,0);
cvNamedWindow("test",1);
cvShowImage("test",c);
cvWaitKey(0);
cvReleaseImage(&b);
cvReleaseImage(&a);
cvReleaseImage(&c);
cvReleaseImage(&e);
cvDestroyWindow("test");
return 0;
}
我觉得应该是cvGEMM函数处出错了,但是我不知道怎么解决这个问题。本人刚开始接触opencv,希望各位高手帮帮忙,我的分不多,谢谢啊! 展开
2个回答
展开全部
c = cvCreateImage(cvSize(112,92),IPL_DEPTH_8U,1);
e = cvCreateImage(cvSize(224,224),IPL_DEPTH_8U,1);
大小不一致。
e = cvCreateImage(cvSize(224,224),IPL_DEPTH_8U,1);
大小不一致。
追问
谢谢你的回答!但是我在后面不是改了c的结构吗?
cvReshape(c,&d,1,46);
cvGetImage(&d,c);
还是说这样改不行呢?谢谢!
追答
cvSet(e,cvScalar(0,0,0,0),NULL);是设置数组元素的值。
cvReshape(c,&d,1,46); 修改矩阵或图像头。修改后d应该指向(46行数,112*2列数)大小的矩阵
,
然后cvGetImage(&d,c);c应该也是这个大小。(46*224)*(224*224)应该是这个,那就是我没仔细看了。(图像好像是宽*高,矩阵好像是高*宽表示大小,有点蒙了)
楼主直接加断点看哪行出错。比如是cvGEMM(c,e,1,NULL,0,c,0);这行出错。因为你是控制台程序有直接报第几行出错。你再去源代码看那行是干么的就知道是什么错误。
1.b是否读入正确,尺寸是否刚好和a一致,是否是单通道。
2.a,c是否有值(基本上都有)。
3.看看是不是图像kuan*高和矩阵高*宽弄混了,我也有点晕。
4.cvGEMM最后一个值等于0是什么意思,我现在电脑没装opencv,直接查源代码不方便。
5.矩阵头d是否需要释放,会引起引用计数错误么?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询