执行后未处理的异常
Posted
技术标签:
【中文标题】执行后未处理的异常【英文标题】:Unhandled exception after execute 【发布时间】:2011-01-08 23:39:51 【问题描述】:我正在尝试使灰色图像更亮,代码编译正常但第二张图片没有变化,执行完成后出现错误消息Unhandled exception ...
。这是我的一段代码:
int main(int argc, _TCHAR* argv[])
IplImage *img = cvLoadImage("mra.jpg");
if (!img)
printf("Error: Couldn't open the image file.\n");
return 1;
//IplImage* new_image = getlargersize(img);
double Min , Max ;
Min = Max = 0 ;
Max_Min (img , &Min , &Max);
cout<<"the max value in the picture is :"<<Min<<" and the minimum value is :"<<Max<<endl ;
IplImage* img2 = eclaircir(Min ,Max ,img);
cvNamedWindow("Image:", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Image2:", CV_WINDOW_AUTOSIZE);
cvShowImage("Image2:", img2);
cvShowImage("Image:", img);
cvWaitKey(0);
cvDestroyWindow("Image2:");
cvDestroyWindow("Image:");
cvReleaseImage(&img2);
cvReleaseImage(&img);
return 0;
void Max_Min(IplImage* temp , double *min , double *max )
CvScalar pix ;
for (int i = 0 ; i < temp->height ; i++)
for (int j = 0 ; j < temp->width ; j++)
pix = cvGet2D(temp , i , j);
if ( pix.val[0] >= *max )
*max = pix.val[0];
if ( pix.val[0] <= *min)
*min = pix.val[0];
IplImage* eclaircir (double min , double max , IplImage* image)
double temp = max - min ;
CvScalar pix ;
for (int i = 0 ; i < image->height ; i++)
for (int j = 0 ; j < image->width ; j++)
pix = cvGet2D(image , i , j);
pix.val[0] = ( pix.val[0] - min)*255 ;
pix.val[0] = pix.val[0]/temp ;
cvSet2D(image , i , j , pix );
return image ;
【问题讨论】:
要确定你为什么会得到一个异常,知道你得到的什么异常显然是有用的。此外,您应该格式化您的帖子,使其可读(编辑窗口上方有一些按钮,您可以单击以进行格式化)。 在 Visual Studio 中有一个选项可以让调试器在异常情况下中断。 【参考方案1】: 你说你在你的标签中使用C++,但是使用opencv的C接口。为什么? C++ 界面要友好得多。 有一些 opencv 函数可用于您的函数正在执行的操作。 http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html#cv-minmaxloc 用于最小值和最大值,http://opencv.willowgarage.com/documentation/cpp/core_operations_on_arrays.html?highlight=scaleabs#convertScaleAbs 用于缩放图像值。 您的访问冲突可能是因为您释放了图像两次。您的eclaircir
返回输入图像,因此img
和img2
指向同一个IplImage。使用 c++ 接口的另一个原因。
【讨论】:
以上是关于执行后未处理的异常的主要内容,如果未能解决你的问题,请参考以下文章
显示徽标后未处理 Visual Studio 2013 安装