如何实现灰度图像素转换:白色像素转黑,非黑白像素转白?
解决方案
你的代码存在变量名不统一、numpy逻辑判断语法错误、需求逻辑实现偏差等问题,以下是两种可行的解决方式:
方法一:布尔索引直接赋值
import cv2 import numpy as np import matplotlib.pyplot as plt # 以单通道灰度模式读取图像 img = cv2.imread('binary.jpeg', 0) # 复制原图像作为结果容器 result = img.copy() # 把白色像素(值为255)转为黑色(值为0) result[img == 255] = 0 # 把非黑非白的像素转为白色(值为255) result[(img > 0) & (img < 255)] = 255 # 展示处理后的图像 plt.imshow(result, cmap='gray') plt.show()
方法二:使用np.where嵌套实现
import cv2 import numpy as np import matplotlib.pyplot as plt # 读取灰度图像 img = cv2.imread('binary.jpeg', 0) # 嵌套np.where实现需求:先转白色为黑色,再转中间值为白色 result = np.where(img == 255, 0, np.where((img > 0) & (img < 255), 255, img)) plt.imshow(result, cmap='gray') plt.show()
关键注意点
- 读取图像必须加参数
0,确保得到单通道灰度图,否则cv2默认会读取为三通道BGR图像,后续像素判断会失效。 - numpy数组做逻辑判断时,必须用
&(逻辑与)、|(逻辑或),不能使用Python原生的and/or。 - 布尔索引的方式更直观,适合快速理解和调试;np.where的方式则更简洁,适合写紧凑的代码。
内容的提问来源于stack exchange,提问作者Qasim0787
相关产品推荐
相关产品推荐

