gpt4 book ai didi

python - 从叠加图像中提取多边形

转载 作者:行者123 更新时间:2023-12-02 02:01:44 25 4
gpt4 key购买 nike

superimposed images

我有 2 张由三角形组成的图像。我将它们加在一起并形成新的多边形。
当这两个图像叠加时是否可以确定多边形?我应该以处理结果图像为目标,还是可以根据输入三角形的位置来确定它?

注意:我知道第一个和第二个图像顶点和三角形的确切位置(x,y)

Clockwise coordinates of triangles [Rectangle Width 512 pixels, Height 256 pixels]

triangle a1 = [0,0] [512,128] [0,256]
triangle a2 = [0,0] [512,0] [512,128]
triangle a3 = [0,256] [512,128] [512,256]

triangle b1 = [0,0] [200,256] [0,256]
triangle b2 = [0,0] [150,0] [200,256]
triangle b3 = [150,0] [512,0] [200,256]
triangle b4 = [512,0] [512,256] [200,256]

最佳答案

我选择了视觉方法而不是分析方法:

  • 在左侧图片中绘制“a”三角形,并填充 1、2、3
  • 在右图中画出“b”三角形,填充100、200、300
  • 添加左右图片
  • 在结果中找到唯一的颜色,每个颜色对应一个多边形,其值将告诉您哪两个初始三角形相交

这段代码只是为左图设置的:

#!/usr/bin/env python3

# https://stackoverflow.com/q/68938410/2836621

import cv2
import numpy as np

# Make black canvas for left image and right image
left = np.zeros((256,512),np.uint16)
right = np.zeros((256,512),np.uint16)

# Draw "a" triangles filled with 1, 2, 3 onto left image
a1 = np.array([[0,0],[512,128],[0,256]], np.int32).reshape((-1,1,2))
cv2.fillPoly(left,[a1],(1),8)
a2 = np.array([[0,0],[512,0],[512,128]], np.int32).reshape((-1,1,2))
cv2.fillPoly(left,[a2],(2),8)
a3 = np.array([[0,256],[512,128],[512,256]], np.int32).reshape((-1,1,2))
cv2.fillPoly(left,[a3],(3),8)
cv2.imwrite('left.png', left)

请注意,我对下面的左图进行了对比度拉伸(stretch),以便您可以看到它:

enter image description here

这段代码只是为了正确的图像而设置的:

# Draw "b" triangles filled with 100, 200, 300 onto right image
b1 = np.array([[0,0],[200,256],[0,256]], np.int32).reshape((-1,1,2))
cv2.fillPoly(right,[b1],(100),8)
b2 = np.array([[0,0],[150,0],[200,256]], np.int32).reshape((-1,1,2))
cv2.fillPoly(right,[b2],(200),8)
b3 = np.array([[150,0],[512,0],[200,256]], np.int32).reshape((-1,1,2))
cv2.fillPoly(right,[b3],(300),8)
b4 = np.array([[512,0],[512,256],[200,256]], np.int32).reshape((-1,1,2))
cv2.fillPoly(right,[b4],(400),8)
cv2.imwrite('right.png', right)

请注意,我对下面的右图进行了对比度拉伸(stretch),以便您可以看到它:

enter image description here

下面的代码是实际的答案:

# Add the two images
result = left + right
cv2.imwrite('result.png', result)

# Find the unique colours in the image - that is the number of polygons
colours = np.unique(result)
print(f'Colours in result: {colours}')

# Iterate over the polygons, making one at a time black on a grey background
for c in colours:
masked = np.where(result==c, 0, 128)
cv2.imwrite(f'result-{c}.png', masked)

示例输出

Colours in result: [101 103 201 202 203 301 302 303 401 402 403]

输出图像

enter image description here

希望您可以看到,例如输出图像中的颜色 402 是填充 2 的三角形与填充 400 的三角形相交的位置,依此类推。

请注意,如果需要,您可以在每个蒙版多边形上运行 findContours() 来获取其顶点和面积。

关于python - 从叠加图像中提取多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68938410/

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