gpt4 book ai didi

C#扫描特定 block 的图像

转载 作者:太空狗 更新时间:2023-10-29 22:54:36 25 4
gpt4 key购买 nike

我有一张照片:

大小为 1000x1000 的白色,带有随机的黑点。 (它可能包含一个黑色方 block (尺寸 50x50))

有没有一种简单的方法可以知道图片是否包含黑色方 block (尺寸 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
}
}
}

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

最佳答案

喜欢Boyer-Moore string searching algorithm ,如果您正在查看的项目不是您正在查找的内容的一部分,则可以跳过您正在查找的内容的整个大小。在您的情况下,您可以检查给定像素是否为黑色。如果不是,您可以向前跳过 50 个像素。如果是,则您有一个小盒子可以在其中寻找您的黑色方 block 。

不过,在这种情况下,您可能不需要这么复杂的东西。我猜如果您的算法太慢,那是因为您调用了 GetPixel 函数一百万次,而是最慢的部分。如果您可以将像素放入二维数组,您的算法可能会运行得足够快,不需要重写。

假设您使用的是 System.Drawing.Bitmap 查看 LockBits documentation查看一个小示例,其中包括将位图复制到一维数组以实现超快速访问。

关于C#扫描特定 block 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6771110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com