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团队报告错误,看看会发生什么