从Python中的两条分段线创建二进制掩码

2024-09-27 07:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两条分割线存储在变量seg1(图像中的底线)和seg2(图像中的上线)中,作为一维numpy数组。我尝试创建一个图像,除了这两条线内的区域之外,其他地方都是黑色的->;白色。我所做的是以下不起作用的事情:

binaryim = np.zeros_like(im)
for col in range(0, im.shape[1]):
    for row in range(0, im.shape[0]):
        if row < seg1[col] or row > seg2[col]: 
            binaryim[row][col] = 0
        else:
            binaryim[row][col] = 255

有什么想法吗?线内的一切都应该是一,外面的一切都应该是零。在

Seg2 and seg1


Tags: in图像numpyforrangecolrowshape
2条回答

使用np.arange屏蔽行,cmap='gray'绘制黑白:

import matplotlib.pyplot as plt
import numpy as np

im=np.zeros((100,100)) + 0
r1, r2 = 31,41

rows = np.arange(im.shape[0])
m1 = np.logical_and(rows > r1, rows < r2)
im[rows[m1], :] = 255
plt.imshow(im, cmap='gray')

enter image description here

要在像素级别上工作,请从np.indices获取行和列索引:

^{pr2}$

enter image description here

我能想到的最简单的答案是: 给定图像,曲线1,曲线2曲线:

rows, cols = np.indices(im.shape)
mask0=(rows < curve1) & (rows > curve2)
plt.gca().invert_yaxis()
plt.imshow(mask0,origin='lower',cmap='gray')
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])
plt.show()

相关问题 更多 >

    热门问题