我有一个图像,如下所示,我正尝试将其转换为二进制图像。
要将这张图片转换成二进制图片,我做了:
image[image > 0] = 255
这样创建的二进制图像的彩色区域仅具有白色像素。但是我也想将彩色区域上方的像素转换为值255。我该怎么做?我不仅要将彩色像素转换为白色,还要转换其上方的区域。我可以这样做吗?箭头指示的区域将保持黑色(即彩色区域之后的区域)
![enter image description here](https://i.sstatic.net/hp8my.jpg)
更新
另外,如果边缘如下所示,我该如何处理:
![enter image description here](https://i.sstatic.net/LB0ly.png)
最佳答案
如果我对您的问题的理解正确,则应采取更详尽的方法来获得理想的结果。
首先,使用简单阈值的方法会产生噪声。
我使用了样本的修改后的图片:
如果您应用阈值设置,则可能会出现如下结果:
更好的阈值在这里可能有用:
image3 = cv2.inRange(image, np.array([10, 10, 10]), np.array([255, 255, 255]))
结果将创建一个二进制图像(类似于您想要的输出,除了上面的条):
![enter image description here](https://i.sstatic.net/B0VQ8.jpg)
为了摆脱条纹,我会(虽然这只是一种方法,但不是完美的方法)使用某种方法找到由白色区域创建的角,然后用它用黑色绘制其上方的所有区域:
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](https://i.sstatic.net/gkTzx.jpg)
关于python - 如何基于坐标更新numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58467111/