none
找图问题 RRS feed

  • 问题

  • 我有两个Bitmap对象,A和B,其中B是A的一部分(在图上).

    怎么找出B在A的坐标(Point)

    我的思路是用Bitmap.GetPixel方法逐点比对,但不知道怎么循环,请大家指教一下!

    循环法代码:

        Function FindMap(ByVal Y As Image, ByVal Z As Image) As Point
            Dim 原图 As Bitmap = CType(Y, Bitmap)
            Dim 找图 As Bitmap = CType(Z, Bitmap)
            Dim 相同次数 As Integer
            Dim 剩余区域 As Integer = 原图.Width * 原图.Height - 找图.Width * 找图.Height
            If 剩余区域 < 0 Then
                Return Nothing
            End If
            For 原图X坐标 = 0 To 原图.Width - 1
                For 原图Y坐标 = 0 To 原图.Height - 1
                    For 找图X坐标 = 0 To 找图.Width - 1
                        If 原图X坐标 + 找图.Width > 原图.Width Then
                            Exit For
                        End If
                        For 找图Y坐标 = 0 To 找图.Height - 1
                            If 找图Y坐标 + 找图.Height > 原图.Height Then
                                Exit For
                            End If
                            If 原图.GetPixel(原图X坐标 + 找图X坐标, 原图Y坐标 + 找图Y坐标) <> 找图.GetPixel(找图X坐标, 找图Y坐标) Then
                                相同次数 = 0
                                Exit For
                            Else
                                相同次数 += 1
                            End If
                            If 相同次数 = 找图.Width * 找图.Height Then
                                Return New Point(原图X坐标, 原图Y坐标)
                            End If
                        Next
                    Next
                Next
            Next
            Return Nothing
        End Function

    问题:图片大了就一直循环出不来.
    我是包子!
    2010年4月3日 8:16

全部回复

  • 你好,

    对于这个问题我尝试了很多种算法,但试下来还是不行,有几个问题我们可以一起讨论一下。
    1. 对于每一个点几乎都可以在另一个图片中找到同样像素的点。
    2. 如果说这个点旁边的点也在另一个图中,也不能判断这两个点构成的图片算子图。
    3. 如果几个点在另一个图中有子图,而且离散的其他点群在另一个图中也有子图,是不是就找出了很多子图了?

    比对用循环是没错,对于二维图用两个for来循环x,y轴,但对于子图的算法却很难。我想你可能需要找一些现成的组件来做运算了。如果你找到什么新的发现,大家可以一起讨论讨论。

    Sincerely,
    Kira Qian


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年4月9日 8:42
  • 关于循环法很费事,现在有一种把2张位图转换为Byte数组,通过数组匹配,然后再将数组成员标号换算成坐标点,有没有知道原理的,或者找个源代码来看看,网上有易语言,VB的.net翻译过去失灵了!


    我是包子!
    2010年4月9日 8:51