Opencv cv :: Subtract方法抛出System.Runtime.InteropServices.SEHException异常

时间:2017-09-09 12:05:35

标签: c++ opencv image-processing

我目前正在尝试在Opencv中实现Lucy Richardson算法,当我在程序中运行'cv :: subtract'方法时会抛出InteropServices异常(下面的堆栈跟踪)

************** Exception Text **************
System.Runtime.InteropServices.SEHException (0x80004005): External has thrown an exception. 
at cv.Mat.=(Mat* , MatExpr* expr) in e:\opencv\opencv\build\include\opencv2\core\mat.inl.hpp:line 3107
at LucyRichardson.LucyRich(LucyRichardson* , Mat* , basic_string<char\,std::char_traits<char>\,std::allocator<char> >* imagePath) in e:\documents\development\realtimeimageprocessing\imageprocessing\imageprocessing\lucyrichardson.cpp:line 63

下面是发生错误的代码块,它出现在第二行。

im_correction = cv::Mat (cvSize(383, 357), 8, 1);
cv::subtract(im, im_conv_kernel, im_correction);
cv::namedWindow("Sub");
cv::imshow("Sub", im_correction);

变量 im im_conv_kernel 都是cv :: Mat类型,并且已正确填充,变量 im_correction 我尝试创建一个在我保存减法结果之前的版本。

我在程序的其他部分使用cv :: subtractions。

有谁知道为什么会出现这种错误以及如何修复它?或者,如果有不同的方法,我可以尝试减法?

1 个答案:

答案 0 :(得分:0)

我已经解决了我需要确定所有相同类型图像的问题。 - 在执行减法之前添加以下三行后,它工作正常。

im.convertTo(im, CV_8UC1);
im_conv_kernel.convertTo(im_conv_kernel, CV_8UC1);
im_correction.convertTo(im_correction, CV_8UC1);