在Python中将图像划分为矩形信息

时间:2019-03-22 00:56:52

标签: python image algorithm image-processing python-imaging-library

我有一系列图像,不过就是黑色背景中的一系列彩色矩形 示例:enter image description here。我如何(在Python 3.7中使用PIL)制作一个程序来识别这些矩形(xy位置,颜色和大小)?效率不是很重要,因此可以嵌套for。到目前为止,我一直想出的每一种算法都有很多缺陷,并且可能以许多不同的方式出错,或者只是过于复杂而根本不值得

2 个答案:

答案 0 :(得分:1)

我不知道您对OpenCV的看法还可以。

如果准备使用openCV,则可以使用findContours获得所需的东西。

下面是代码:

    import cv2
    readImage= cv2.imread(r"<ImagePath>\oKvDi.png")
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    #Code to Find edges of Square using Canny edge detection method and finding Contours and drawing in Back Line

    edges = cv2.Canny(img_gray, 0, 100)
    contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    #Just for your reference to show all rectangles are found
    cv2.drawContours(readImage, contours, -1, (0, 0, 0), 5)
    cv2.imwrite(r"<ImageSavePath>/a.png",readImage)

希望这可以解决您的问题

答案 1 :(得分:1)

您根本不需要编写任何代码,可以使用 ImageMagick 来做到这一点,该软件安装在大多数Linux发行版中,并且可用于macOS和Windows。

只需在终端(Windows上为命令提示符)中,即可运行:

magick convert image.png                            \
   -define connected-components:verbose=true        \
   -define connected-components:area-threshold=100  \
   -connected-components 4 -auto-level output.png

示例输出

Objects (id: bounding-box centroid area mean-color):
  0: 1200x714+0+0 651.2,369.3 703177 srgb(0,0,0)
  164: 1200x86+0+714 599.5,756.5 103200 srgb(255,21,0)
  2: 363x155+80+60 261.0,137.0 56265 srgb(255,255,255)
  26: 127x323+60+302 122.6,463.2 39668 srgb(255,255,255)
  54: 308x109+352+373 505.5,427.0 33572 srgb(255,255,255)
  1: 102x159+641+47 691.5,126.0 16218 srgb(255,255,255)
  53: 79x100+977+371 1016.0,420.5 7900 srgb(0,17,255)

因此,查看从0:开始的那一行,有一个尺寸为1200x714的矩形,从0,0(左上角)开始,颜色为黑色,即srgb(0,0,0)。

从下一行看,有一个尺寸为1200x86的矩形,从左上角开始向下714个像素,颜色为红色,即srgb(255,21,0)。

以此类推。

最后一行是位于[977,31]的蓝色的矩形79x100,颜色为蓝色,即srgb(0,17,255)。