C#扫描某个块的图像

use*_*444 5 c# image pixel

我有一张照片:

尺寸为1000x1000白色,带有随机黑点.(它可能包含黑色方块(尺寸50x50))

有没有一种简单的方法可以知道图片是否包含黑色方块(尺寸为50x50)?我想扫描图片的每个像素,如果找到一个黑色像素,扫描他旁边的那个,直到我得到一个50x50的方格,或者直到我得到一个白色像素并继续扫描.但它必须扫描超过一百万像素(如果他没有找到方块).

这基本上是代码(不需要完成它,正如我之前所说,它将花费太多时间来扫描它.如果整个图片是白色而且根据黑色像素的数量要多得多,则会花费数百万次.)

        for (int i = 0; i < pic.Width; i++)
        {
            for (int j = 0; j < pic.Height; j++)
            {
                if (pic.GetPixel(i, j) == Color.Black)
                {
                    //Search for the entire square at that area
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

是的,时间很重要(这就是为什么我不想让像素超过一百万次).有任何想法吗?

Gab*_*abe 5

Boyer-Moore字符串搜索算法一样,如果您正在查看的项目不是您要查找的项目的一部分,则可以跳过您要查找的内容的整体大小.在您的情况下,您可以检查给定像素是否为黑色.如果不是,您可以向前跳过50像素.如果是,你有一个小盒子来寻找你的黑色方块.

但在这种情况下,您可能不需要任何复杂的东西.我猜测,如果你的算法太慢,那是因为你将这个GetPixel函数调用了一百万次,而是一个缓慢的部分.如果您可以将像素放入2D阵列,那么您的算法可能会变得足够快,不需要重写.

假设您使用的是System.Drawing.Bitmap退房的LockBits文件看到,包括复制一个位图到一维数组用于超高速接入一个小样本.