You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现灰度图像素转换:白色像素转黑,非黑白像素转白?

解决方案

你的代码存在变量名不统一、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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 04:15:20