0

使用 OpenCVSharp (2.4.10.201...) 的最新 v2,我使用 NuGet 管理器将其安装在我的项目中。

似乎洪水填充功能存在内存损坏问题。我将其应用于以下图像: 在此处输入图像描述

结果如下: 在此处输入图像描述

而生成的掩码遵循相同的损坏模式: 在此处输入图像描述

我使用的代码是:

filledArea = new CvMat( hue.Rows + 2, hue.Cols + 2, MatrixType.U8C1 );
Cv.FloodFill( hue, hintPos, new CvScalar(255,255,255), low, upp, out filledAreaData,
    FloodFillFlag.Link8 | FloodFillFlag.FixedRange, filledArea );

其中 色相是输入图像

hintPos是 CvPoint(10,400)

低 = upp = CvScalar(10,10,10,10)

注意:“腐败模式”是随机的,并且每次都在变化。

4

1 回答 1

0

没有用零值初始化掩码是一个问题。它看起来像这样:

filledArea = new CvMat( hue.Rows + 2, hue.Cols + 2, MatrixType.U8C1 );

不会将保留的内存初始化为任何值,因此您会得到“损坏”的像素。

filledArea = new CvMat( hue.Rows + 2, hue.Cols + 2, MatrixType.U8C1, new CvScalar(0,0,0,0) );

确实创建了一个 0 像素的蒙版。

我错了,我认为在 C# 中不先将其初始化为某个值就不可能获取新内存,就像 Array[] 和 List...

于 2017-05-19T06:57:21.040 回答