【发布时间】:2014-02-12 20:05:21
【问题描述】:
我通过 C# 中的网络摄像头捕获的图像很少。我想对这些图像做一些处理。我想从不是黑色的图像中删除像素。
请告诉我如何删除不是黑色的像素或区域并将其替换为白色。
例子:
我想把它转换成这样:
【问题讨论】:
-
但是边框也是黑色的,你将如何分离图像上黑色实体的语义?我建议看看:opencv.org 和互联网上可用的相关 .net 包装器
我通过 C# 中的网络摄像头捕获的图像很少。我想对这些图像做一些处理。我想从不是黑色的图像中删除像素。
请告诉我如何删除不是黑色的像素或区域并将其替换为白色。
例子:
我想把它转换成这样:
【问题讨论】:
尝试使用Emgu CV(.NET中的OpenCV),具体见License Plate Recognition in CSharp示例。
【讨论】:
最简单的方法可能是检查每个像素并验证它是否在“可接受”的颜色范围内。
例如:
var YourImage = (Bitmap)Image.FromFile("LicensePlate.png");
for (var x = 0; x < YourImage.Width; x++)
for (var y = 0; y < YourImage.Height; y++) {
var pixel = YourImage.GetPixel(x, y);
if (pixel.r > 200 && pixel.g > 200 && pixel.b > 200)
YourImage.SetPixel(x, y, Color.White);
}
以上代码会将非黑色区域替换为白色像素。
【讨论】:
用于 OpenCV 的 EmguCV 包装器是一个好的开始,车牌应该可以帮助您完成大多数情况。如果您想要更强大的东西(照明变化),我建议您添加 wolf 的二值化。我不知道它是否在 EmguCV 中实现,但在 http://liris.cnrs.fr/christian.wolf/software/binarize/ 有可用的 c++ 代码 使用 EmguCV 很容易适应 c#。
【讨论】: