C# 使用Emgu CV 3.1进行内存管理的正确方法 我的背景是C++,我一直试图把我的应用程序OpenOV翻译成使用EGUCV的C应用程序。我已经尽可能深入地阅读了EmguCV文档和Wiki以及StackOverflow Q/Q,但没有解决一些基本问题。在这一点上,我想知道我对EmguCV的看法是否存在根本缺陷 我印象中,当EmguCV提供了一个C++库的接口,让我们说“代码> FloodFill 使用 CVPojk.FloodFill(InPutoPutsRoad,InPutoPutsRoad,…)< />代码,下面它将自己的内存管理放在返回的代码> IInputOutputArray < /C>(在我的例子中,Mat)已全部处理完毕。但实际上,调用CvInvoke.FloodFill失败,dll中出现异常
这就是我所拥有的:C# 使用Emgu CV 3.1进行内存管理的正确方法 我的背景是C++,我一直试图把我的应用程序OpenOV翻译成使用EGUCV的C应用程序。我已经尽可能深入地阅读了EmguCV文档和Wiki以及StackOverflow Q/Q,但没有解决一些基本问题。在这一点上,我想知道我对EmguCV的看法是否存在根本缺陷 我印象中,当EmguCV提供了一个C++库的接口,让我们说“代码> FloodFill 使用 CVPojk.FloodFill(InPutoPutsRoad,InPutoPutsRoad,…)< />代码,下面它将自己的内存管理放在返回的代码> IInputOutputArray < /C>(在我的例子中,Mat)已全部处理完毕。但实际上,调用CvInvoke.FloodFill失败,dll中出现异常,c#,emgucv,flood-fill,C#,Emgucv,Flood Fill,这就是我所拥有的: int i = ... int j = ... int intensity = ... int height = img.Rows; int width = img.Cols; Mat outputMask = new Mat(height + 2, width + 2, DepthType.Cv8U, 1); Rectangle dummy = new Rectangle(); CvInvoke.FloodFill(img, outputMask, new Point(i,
int i = ...
int j = ...
int intensity = ...
int height = img.Rows;
int width = img.Cols;
Mat outputMask = new Mat(height + 2, width + 2, DepthType.Cv8U, 1);
Rectangle dummy = new Rectangle();
CvInvoke.FloodFill(img, outputMask, new Point(i, j), new MCvScalar(255), out dummy, new MCvScalar(intensity), new MCvScalar(intensity), Connectivity.EightConnected, FloodFillType.MaskOnly);
但是调用失败,异常描述没有帮助。我使用了GCHandle
分配和钉扎等方法来访问下面的原始数据,但我相信CvInvoke.FloodFill
在一些本地Mat
上调用时应该是安全的
我的问题是,我是否完全偏离了EmguCV在使用C++和OpenCV的背景下使用的方式。如果是这样,调用这种函数的正确方法是什么? 这是针对任何可能发现自己与EMGUCV 3.1填充的问题相同的人。经过长时间调试我的代码,我是CONV。由于
CvInvoke.FloodFill
的EmguCV 3.1实现存在缺陷。无法使用FloodFillType.MaskOnly
标志从该方法中获取掩码
相反,我最终编辑了我的原始图像,使其值介于0
和254
之间,然后使用255
的填充值进行正常泛光填充。然后使用image.InRange()
方法分离所有255
(填充)原始图像的像素。我将向EmguCV团队报告错误,看看会发生什么