我有一张照片:
尺寸为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)
是的,时间很重要(这就是为什么我不想让像素超过一百万次).有任何想法吗?
与Boyer-Moore字符串搜索算法一样,如果您正在查看的项目不是您要查找的项目的一部分,则可以跳过您要查找的内容的整体大小.在您的情况下,您可以检查给定像素是否为黑色.如果不是,您可以向前跳过50像素.如果是,你有一个小盒子来寻找你的黑色方块.
但在这种情况下,您可能不需要任何复杂的东西.我猜测,如果你的算法太慢,那是因为你将这个GetPixel函数调用了一百万次,而这是一个缓慢的部分.如果您可以将像素放入2D阵列,那么您的算法可能会变得足够快,不需要重写.
假设您使用的是System.Drawing.Bitmap退房的LockBits文件看到,包括复制一个位图到一维数组用于超高速接入一个小样本.
| 归档时间: |
|
| 查看次数: |
2493 次 |
| 最近记录: |