c# - 如何使用 ConnectedComponents 删除二进制图像中的连接对象
问题描述
我正在使用 EmguCV 和 C#。我想使用 ConnectedComponentsWithStats 从我的图像中删除小的连接对象
我能够为指定区域绘制一个矩形。现在我想从二进制图像中删除对象
这是我的代码
Image<Gray, byte> imgry = image.Convert<Gray, byte>();
var mask = imgry.InRange(new Gray(50), new Gray(255));
var label = new Mat();
var stats = new Mat();
var centroids = new Mat();
int labels = CvInvoke.ConnectedComponentsWithStats(mask, label, stats,
centroids,
LineType.EightConnected,
DepthType.Cv32S);
var img = stats.ToImage<Gray, int>();
Image<Gray, byte> imgout1 = new Image<Gray, byte>(image.Width, image.Height);
for (var i = 1; i < labels; i++)
{
var area = img[i, (int)ConnectecComponentsTypes.Area].Intensity;
var width = img[i, (int)ConnectecComponentsTypes.Width].Intensity;
var height = img[i, (int)ConnectecComponentsTypes.Height].Intensity;
var top = img[i, (int)ConnectecComponentsTypes.Top].Intensity;
var left = img[i, (int)ConnectecComponentsTypes.Left].Intensity;
var roi = new Rectangle((int)left, (int)top, (int)width, (int)height);
if (area > 1000)
{
CvInvoke.Rectangle(imgout1, roi, new MCvScalar(255), 1);
}
}
如何删除指定大小的对象
我通过使用轮廓实现了一种方法,它适用于小图像,当我有大图像 10240*10240 和更多数量的粒子时,我的应用程序进入中断模式
解决方案
推荐阅读
- php - Laravel 5 loadJsonTranslationsFrom 方法不会从包中加载所有 JSON 翻译文件
- matlab - 在 MATLAB 中为“现在”设置特定时间
- kubectl - 如何使用代理服务器进行 kubectl?
- python - 如何使用 matplotlib 或 plotly 在 3-D 曲面图上叠加等高线图?
- php - Flutter Unhandled Exception: FormatException: Unexpected character (at character 4)
- sql - 如何从每一列的最大值的行中选择一个 ID?
- mongodb - 当每个字段都可搜索和可排序时,如何在 MongoDB 上正确构建索引?
- amazon-s3 - 使用目录结构在同一帐户中的两个存储桶之间同步对象
- node.js - Mocha/Chai 节点测试中的“之前”和“描述”块中的操作顺序
- android-bluetooth - 禁用按钮直到蓝牙连接