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

使用OpenCV统计黑白像素结果始终为0的问题求助

问题排查与修复

最直接的原因:文件路径不对

os.listdir() 只返回文件名(比如abc.jpg),但cv2.imread(pic)会在当前脚本的工作目录找这个文件,而非你指定的output_path目录,导致图片读取失败,image为None,后续像素统计自然全为0。

修复方案

1. 拼接完整文件路径

用os.path.join()把目录和文件名拼接成完整路径,确保OpenCV能定位到图片文件。

2. 明确读取灰度图

既然是黑白图像,直接用cv2.IMREAD_GRAYSCALE读取为单通道灰度图,避免多通道(如RGB)重复统计的干扰。

3. 避免除以零报错

若某张图全为白色,黑色像素数为0,计算比例时会触发报错,需添加判断逻辑处理这种情况。

修复后的完整代码

import os
import cv2
import numpy as np

output_path = "/content/drive/MyDrive/dataset_demo/result_pic"

for pic in os.listdir(output_path):
    if pic.endswith('.jpg'):
        # 生成完整文件路径
        full_img_path = os.path.join(output_path, pic)
        # 读取为单通道灰度图
        image = cv2.imread(full_img_path, cv2.IMREAD_GRAYSCALE)
        
        if image is not None:
            white_pix = np.sum(image == 255)
            black_pix = np.sum(image == 0)
            total_pix = white_pix + black_pix
            # 处理黑色像素为0的情况
            ratio = white_pix / black_pix if black_pix != 0 else float('inf')
            print(f"{pic}: 总像素{total_pix}, 白黑比例{ratio:.2f}")
        else:
            print(f"无法读取图片: {pic}")

额外注意点

如果你的“黑白图像”并非严格二值图(存在灰色过渡像素),上述统计只会计算纯黑纯白的像素。若要将所有偏白/偏黑的像素归类统计,需先做二值化处理:

# 以127为阈值,将灰度图转为严格二值图
_, binary_img = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
white_pix = np.sum(binary_img == 255)
black_pix = np.sum(binary_img == 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:51:09