在C中识别俄罗斯方块

时间:2009-05-20 10:35:29

标签: c image image-processing

我必须制作一个应用程序,在黑白图像中识别用户提供的一块俄罗斯方块。我读了图像以分析成数组。

我怎样才能使用C做这样的事情?

4 个答案:

答案 0 :(得分:1)

看看维基百科中给出的俄罗斯方块的形状,称为“I,J,L,O,S,T,Z”,它似乎是边界框边的比例(给定二进制文件很容易找到)图像和C)显示你是否有我(4:1)或O(1:1);其他形状是2:3。

要检测您拥有的其余形状(J,L,S,T或Z),看起来您可以收集落在边界框边缘的形状边缘的长度和位置。因此,T沿3边显示3和1,沿2边显示1和1。跟踪位置有助于区分J与L,S和Z.

答案 1 :(得分:1)

您可能不想从头开始实现(当然除非必要)...我建议您寻找合适的库。我听说OpenCV很好,但我从未做过机器视觉方面的任何工作,所以我没有测试过。

答案 2 :(得分:1)

搜索连接的组件(即使用深度优先搜索;如果效率问题,您可能希望避免递归;请改用自己的堆栈)。最大的连接组件应该是您的俄罗斯方块。然后,您可以进一步分析它(使用形状,大小或某种边界描述)

答案 3 :(得分:1)

假设您已经将图像加载到数组中,那么使用正则表达式呢? 你不需要精确的形状匹配,但是为什么不试试呢!

编辑:我下载了您的doc文件。你必须在2D数组中的随机数字中识别随机模式,因此正则表达式不适合这个问题,让我们说这是坏消息。好消息是你的作业不是完全图像处理,而且更容易。

这是你的功课,所以我不会为你创建代码,但我可以给你指示。

  1. 您需要一个可以从原始图案/片段旋转创建新片段的例程。 (注意:我的意思是4x4平方 - 它的所有单元格)
  2. 你需要一个程序来检查一块是否与位置x,y处的2D图像中的区域匹配 - 匹配区域将具有角(x-2,y-2,x + 1,y + 1)。 / LI>
  3. 您可以通过检查匹配的每个图像位置(x,y)进行搜索。
  4. 由于必须使用并行性,因此可以创建4个线程并为每个线程分配不同的旋转以进行搜索。