如何处理Visual c++中的SEHException

How to deal with SEHException in Visual c++?

本文关键字:Visual c++ 中的 SEHException 处理 何处理      更新时间:2023-10-16

我已经编写了关于inpaint的代码,部分代码如下所示。软件为Visual c++ 2010,库为OpenCV2.4.7。

包括库:

#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <opencv/cxcore.h>
#include <opencv/cvaux.h>
#include <opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"

关于inpaint

的部分代码
        IplImage *modified = cvLoadImage("D:\save\shutter1.bmp",0);
        IplImage *original = cvLoadImage("D:\save\shutter0.bmp",0);
        IplImage *imageProcess = cvCreateImage(cvSize(this->width,this->height),IPL_DEPTH_8U,1);
        cv::Mat src1 = cv::imread("D:\save\shutter0.bmp");
        cvAbsDiff(original,modified,imageProcess);
        cvThreshold(imageProcess,imageProcess,1,255,CV_THRESH_BINARY);
        IplConvKernel *pKernel = NULL;
        pKernel = cvCreateStructuringElementEx(5, 5, 2, 2, CV_SHAPE_RECT, NULL);
        cvDilate(imageProcess, imageProcess, pKernel, 3);
        cvErode(imageProcess, imageProcess, pKernel, 3);
        cvSaveImage("D:\save\Result.bmp",imageProcess);
        cv::Mat mask = cv::imread("D:\save\Result.bmp");
        cv::Mat dst1;
        inpaint(src1, mask, dst1, 1,cv::INPAINT_TELEA);
        imshow("image", dst1);
        cvShowImage("modified", modified );
        cvShowImage("original", original );
        cvShowImage("imageProcess", imageProcess );
        cvWaitKey(1);
        cvReleaseImage(&original);
        cvReleaseImage(&modified);
        cvReleaseImage(&imageProcess);

这段代码可以通过编译器。然而,当我运行这段代码时,会生成一个窗口,上面写着"System.Runtime.InteropServices.SEHException"。这个代码停在imshow("image", dst1);行。我认为这个问题可能是由于inpaint()的作用造成的。我读了很多关于SEHException的文章,但我仍然不知道如何处理这个问题。我也不知道为什么这段代码会产生这个问题?

在搜索更多的网站并使用try and catch找到异常后,我知道这个SEHException的原因是函数inpaint()中的错误参数导致的。我修改了代码,它可以正常运行。修改后的代码如下:

    cvSaveImage("D:\save\Result.bmp",imageProcess);
    cv::Mat src1 = cv::imread("D:\save\shutter0.bmp");
    cv::Mat img,mask;
    img = cv::imread("D:\save\Result.bmp",CV_LOAD_IMAGE_GRAYSCALE);
    mask=cv::Mat::zeros(this->width, this->height, CV_8UC1);
    mask=img;
    cv::Mat dst1; 
    cv::imshow("mask",mask);
    inpaint(src1, mask, dst1, 1,cv::INPAINT_NS);
    cvWaitKey(1000);
    cv::imshow("inpainted", dst1);