我有一个从实时网络摄像头拍摄的图像,我希望能够检测图像中的特定对象并提取其中的一部分以进行进一步处理。
具体来说,图像是游戏板,让我们说这个问题的目的是它是一个数独游戏板。
我最初的方法是寻找对比区域并从那里开始研究,但我似乎最终有很多潜在的边缘(许多错误的)并且没有真正的线索如何找出哪些是那些我真的想要!
是否有任何算法,库,代码示例,甚至是那些明智的想法,关于如何查找和提取图像的相关部分?
答案 0 :(得分:9)
使用免费的AForge.Net图像处理库。有很多很酷的东西可以玩。
答案 1 :(得分:3)
您需要在图像上执行滤镜操作和遮罩。
我认为没有简单的方法只从图像中获取对象,您需要使用边缘检测算法,剪切,并设置有效对象/图像的标准。
您还可以使用图像阈值来检测对象。您可能需要查看下面的图像处理库。
答案 2 :(得分:1)
其中一种(我猜很多可能的)方法:
查找从给定图像“获取/计算”直线(边缘等)的过滤器。
现在你拥有所有行的集合(数组)(xStart,yStart& xEnd,yEnd)。您可以从坐标轻松计算所有线长。
编辑:解决/编程这类问题总是充满挑战,但同时真的很有趣:)。
答案 3 :(得分:1)
您可以尝试使用Hough Transform。
答案 4 :(得分:1)
我首先使用角落探测器(Harris探测器工作得很好)来找到数独网格的交叉点和角落。
然后我会使用这些点进行图像校正来转换图像,使网格尽可能为矩形。现在你应该毫不费力地找到每个方格进行OCR。
图像校正并不简单,需要大量的数学运算。
准备好阅读:)
如果游戏板的图像已接近矩形,您当然可以跳过整改部分并直接使用角点找到OCR的正方形。
很多人一直建议使用神经网络。我很确定在这个问题上抛出一个神经网络是完全没必要的。如果你需要对对象定义模糊的对象进行分类,NN(有时)是好的。 “在图像中查找汽车”是一个可以用于神经网络的问题,因为汽车可能看起来非常不同但具有相同的一些功能。因此,给定足够的数据,您可以训练您的NN来检测汽车。 在这个问题中,你有一些非常规律的东西,看起来几乎一样,所以NN不会让任何事情变得更容易或更好。
答案 5 :(得分:1)
使用 aforge colorfiltering
为c#提供了很多过滤方法,主要是我更喜欢aforge过滤器,为此他们只有很少的过滤器,它们是
* ColorFiltering
* ChannelFiltering
* HSLFiltering
* YCbCrFiltering
* EuclideanColorFiltering
答案 6 :(得分:1)
看看: https://github.com/dajuric/accord-net-extensions
库“加入”免费的AForge.NET和Accord.NET库,并添加了图像处理和对象跟踪算法。 样品包括:)
答案 7 :(得分:0)
您可以先尝试找到粗线交叉点,然后将它们用作注册标记。
这将是一个良好的开端,因为:
所以:
*更复杂的解决方案是使用神经网络代替遮罩来识别交叉点。这可能是值得的,因为你可能会使用一个用于数字的OCR。
答案 8 :(得分:0)
在不拒绝任何其他想法的情况下,步骤1确实应该是检测图像旋转。您可以通过确定每个点的局部渐变并创建其直方图来完成此操作。这将有90度偏移的4个主要组件。理想情况下,这些将是0,90,180和270但如果它们不是你应该旋转你的图像。例如。在样本图像中,您应该以大约8度CW的旋转开始。
答案 9 :(得分:0)
您应该谷歌 CamShift 或 Blob跟踪或粒子过滤器。它们对您的问题都很有用。其中大部分都附带OpenCV,它是C#包装器AForge.NET。你会在Youtube上找到一些很好的演示,展示它们是如何工作的。
祝你好运