Python图片黑白反转
时间: 2025-05-31 14:53:52 浏览: 36
### Python 实现图片黑白反转的方法
在处理图像时,黑白反转通常指的是将图像中的每个像素值替换为其补码值。对于灰度图像而言,这意味着将每个像素的亮度值 \(I\) 替换为最大可能值减去当前值,即 \(255 - I\)(假设图像以 8 位无符号整数表示)。以下是实现这一功能的具体方法。
#### 方法描述
通过遍历输入图像的所有像素并将其值转换为补码值即可完成黑白反转操作。此过程可以通过 NumPy 的矢量化运算高效实现。具体代码如下:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
def reverse_black_white(img):
"""
图片黑白反转
参数:
img (numpy.ndarray): 输入图像,支持单通道或三通道图像。
返回:
numpy.ndarray: 反转后的图像。
"""
if img.ndim == 2: # 如果是灰度图
reversed_img = 255 - img
elif img.ndim == 3: # 如果是彩色图
reversed_img = 255 - img
else:
raise ValueError("不支持的图像格式")
return reversed_img.astype(np.uint8)
# 示例代码
img_path = r"./Simulation-Result-on-Lena.png"
original_image = cv2.imread(img_path, 0) # 加载灰度图
reversed_image = reverse_black_white(original_image)
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("原始图像")
plt.imshow(original_image, cmap='gray')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.title("黑白反转图像")
plt.imshow(reversed_image, cmap='gray')
plt.axis('off')
plt.tight_layout()
plt.show()
```
以上代码实现了对灰度图像的黑白反转,并利用 Matplotlib 展示了原图及其反转结果[^1]。
---
#### 关键点解析
1. **灰度反转原理**: 对于一幅灰度图像,其像素值范围通常是 \([0, 255]\),其中 \(0\) 表示黑色,\(255\) 表示白色。因此,黑白反转可通过计算 \(255 - I\) 完成,这里 \(I\) 是某个像素的灰度值。
2. **NumPy 矢量化运算**: 使用 `255 - img` 能够快速对整个图像矩阵执行逐元素的操作,而无需显式循环,从而显著提高效率。
3. **Matplotlib 显示**: 利用 `matplotlib.pyplot.imshow()` 函数结合参数 `cmap='gray'` 来正确渲染灰度图像[^2]。
4. **错误处理**: 当输入图像既不是灰度也不是 RGB 彩色图像时,抛出异常提示用户输入不符合预期。
---
### 注意事项
如果需要对彩色图像进行黑白反转,则应分别对其三个颜色通道应用相同的逻辑。上述代码已考虑这一点,在检测到三维数组时会自动应用于所有通道。
---
阅读全文
相关推荐




















