python - 如何在文档中找到最大的空白(白色)正方形区域并返回其坐标和面积?

标签 python opencv image-processing document

我需要在文档中找到最大的空白区域,并使用python在其中放置QR码,以显示其坐标,中心点和区域。
我认为OpenCV和Numpy应该足以完成此任务。

  • 使用什么样的THRESH?由于扫描类型很多:
    灰色,带颜色的BW,以及如何正确找到轮廓?
  • 如何以最快的方式实现?使用示例
    附加了Google的首次扫描,您可以在其中看到代码
    应该找到最大的空平方面积。
    square

  • @Mark Setchell谢谢!这段代码适用于所有带有白色背景的文档,但是当我在背景中使用带有某种颜色的smth时,它会发现一个完全不同的区域。另外,为了在文档中保留细线,我在阈值化后使用了Erode。试图更改阈值和侵 eclipse 参数,但仍无法正常工作。
    编辑帖子,添加彩色图片。
    enter image description here
    enter image description here

    最佳答案

    这是一种可能的方法:

    #!/usr/bin/env python3
    
    import cv2
    import numpy as np
    
    def largestSquare(im): 
        # Make image square of 100x100 to simplify and speed up
        s = 100
        work = cv2.resize(im, (s,s), interpolation=cv2.INTER_NEAREST)
    
        # Make output accumulator - uint16 is ok because...
        # ... max value is 100x100, i.e. 10,000 which is less than 65,535
        # ... and you can make a PNG of it too
        p = np.zeros((s,s), np.uint16)
      
        # Find largest square
        for i in range(1, s): 
            for j in range(1, s): 
                if (work[i][j] > 0 ): 
                    p[i][j] = min(p[i][j-1], p[i-1][j], p[i-1][j-1]) + 1
                else: 
                    p[i][j] = 0
    
        # Save result - just for illustration purposes
        cv2.imwrite("result.png",p)
    
        # Work out what the actual answer is
        ind = np.unravel_index(np.argmax(p, axis=None), p.shape)
        print(f'Location: {ind}')
        print(f'Length of side: {p[ind]}')
          
    # Load image and threshold
    im  = cv2.imread('page.png', cv2.IMREAD_GRAYSCALE)
    _, thr = cv2.threshold(im,127,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    
    # Get largest white square
    largestSquare(thr) 
    
    输出
    Location: (21, 77)
    Length of side: 18
    
    enter image description here
    注意:
  • 我编辑了红色注释,以免干扰我的算法。
  • 我对Otsu进行了阈值处理以获取纯黑色和白色-这可能适合您的用例,也可能不适合。这将取决于您的扫描和纸张背景等。
  • 我将图像缩小到100x100,因此不需要花一整天的时间来运行。您将需要将结果缩放到原始图像的大小,但是我认为您可以轻松地做到这一点。

  • 关键字:图像处理,图像,Python,OpenCV,最大的白色正方形,最大的空白空间。

    关于python - 如何在文档中找到最大的空白(白色)正方形区域并返回其坐标和面积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64369800/

    相关文章:

    image-processing - 调整目标分割图的大小,而不将单个像素值转换为 float

    python - 屏幕尺寸变化时 Kivy 图像更新

    opencv - Openframeworks 上图像处理的类型差异

    algorithm - 寻找图像匹配的边缘对应关系

    python - 了解图像中是否有任何像素为白色的有效方法?

    python - OpenCV - 使用实时摄像头检测托盘中丢失的硬币

    Android 图像识别 API/库(不在云端)

    python - 如何编写更多 Pythonic 代码

    Python:在 super 方法调用中调用子类的方法

    python - 坐标还原python