我已经编写了关于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);
此代码可以通过编译器。但是,当我运行此代码时,会生成一个窗口,显示&#34; System.Runtime.InteropServices.SEHException &#34;。此代码停在imshow("image", dst1);
行。我认为问题可能来自inpaint()
的功能。我已经阅读了很多关于SEHException的文章,但我仍然不知道如何处理这个问题。我也不知道为什么这段代码会产生这个问题?
答案 0 :(得分:0)
在搜索更多网站并使用try和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);