我目前正在尝试在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。
有谁知道为什么会出现这种错误以及如何修复它?或者,如果有不同的方法,我可以尝试减法?
答案 0 :(得分:0)
我已经解决了我需要确定所有相同类型图像的问题。 - 在执行减法之前添加以下三行后,它工作正常。
im.convertTo(im, CV_8UC1);
im_conv_kernel.convertTo(im_conv_kernel, CV_8UC1);
im_correction.convertTo(im_correction, CV_8UC1);