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