python - 如何基于坐标更新numpy数组

标签 python numpy opencv computer-vision

我有一个图像,如下所示,我正尝试将其转换为二进制图像。

要将这张图片转换成二进制图片,我做了:

image[image > 0] = 255

这样创建的二进制图像的彩色区域仅具有白色像素。但是我也想将彩色区域上方的像素转换为值255。我该怎么做?我不仅要将彩色像素转换为白色,还要转换其上方的区域。我可以这样做吗?箭头指示的区域将保持黑色(即彩色区域之后的区域)

enter image description here

更新
另外,如果边缘如下所示,我该如何处理:

enter image description here

最佳答案

如果我对您的问题的理解正确,则应采取更详尽的方法来获得理想的结果。

首先,使用简单阈值的方法会产生噪声。

我使用了样本的修改后的图片:
enter image description here

如果您应用阈值设置,则可能会出现如下结果:
enter image description here

更好的阈值在这里可能有用:

image3 = cv2.inRange(image, np.array([10, 10, 10]), np.array([255, 255, 255]))

结果将创建一个二进制图像(类似于您想要的输出,除了上面的条):
enter image description here

为了摆脱条纹,我会(虽然这只是一种方法,但不是完美的方法)使用某种方法找到由白色区域创建的角,然后用它用黑色绘制其上方的所有区域:
ind = np.where(image3 == 255)
max_x = np.max(ind[1])
max_y = ind[0][np.argmax(ind[1])]
image3[:max_y, :max_x] = 255

结果将是这样的:
enter image description here

关于python - 如何基于坐标更新numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58467111/

相关文章:

c++ - 如何修复重叠的 XML?

python - 如何在Anaconda Navigator中下载opencv-python库?

python - OpenCV 版本 4.1.0 drawContours 错误 : (-215:Assertion failed) npoints > 0 in function 'drawContours'

python - 如何解析按特定标签 ID 分组的 XML

python - 基于另一个列表中每个索引的值的列表组合

python - 如何只对 python 循环中的第一项执行某些操作?

python - 如何全屏显示绘图

python - 从数组中的每一行中选择特定列

python - 循环遍历 python 数组以匹配第二个数组中的多个条件,快速方法?

opencv - opencv中边缘的特征检测