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

使用OpenCV/PIL读取验证码图像时像素值全为零的问题求助

问题解决方案

1. 问题根源

你遇到的这类验证码属于透明通道存储有效信息的类型:实际验证码的像素值保存在Alpha(透明度)通道中,而RGB通道被设置为全黑(像素值0),所以直接读取RGB通道会得到全0的结果,但PIL显示时会自动结合Alpha通道和背景,所以看起来正常。

2. 验证通道信息

用PIL查看通道详情

from PIL import Image
import numpy as np

img = Image.open("uQqXw.png")
print(img.mode)  # 输出应为"RGBA",说明包含Alpha通道
# 拆分通道查看
r, g, b, a = img.split()
# 打印Alpha通道的像素数组
print(np.array(a))  # 这里会显示验证码的有效像素值

用OpenCV查看通道详情

import cv2
import numpy as np

# 必须加IMREAD_UNCHANGED参数,否则会忽略Alpha通道
img = cv2.imread("uQqXw.png", cv2.IMREAD_UNCHANGED)
print(img.shape)  # 输出应为(h, w, 4),代表4通道RGBA图像
# 提取Alpha通道
alpha_channel = img[:, :, 3]
print(alpha_channel)  # 这里会显示验证码的有效像素值

3. 提取有效图像

直接提取Alpha通道作为单通道图像即可获取有效像素:

PIL处理方式

from PIL import Image
import numpy as np

img = Image.open("uQqXw.png")
# 提取Alpha通道
alpha_channel = img.split()[3]
# 转换为数组(此时像素值正常)
alpha_array = np.array(alpha_channel)
# 显示或保存
alpha_channel.show()

OpenCV处理方式

import cv2
import numpy as np

img = cv2.imread("uQqXw.png", cv2.IMREAD_UNCHANGED)
alpha_channel = img[:, :, 3]
# 显示验证码
cv2.imshow("Captcha", alpha_channel)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 此时alpha_channel数组即为有效像素值

内容的提问来源于stack exchange,提问作者Saurabh Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:45:00