基于Python OpenCV的160×320显示屏坏点检测方案咨询
Python+OpenCV实现160×320显示屏坏点检测与像素验证
需求:使用Python+OpenCV检测160×320规格显示屏的坏点(颜色异常或黑屏像素),验证总像素数是否为51200,并定位每个坏点的位置。
现状:尝试过轮廓检测方法,但无法定位缺失的像素,认为网格遍历是最优解决方案。
网格遍历方案思路
轮廓检测适合识别连通的异常区域,但对单个缺失/异常像素的定位精度不足。网格遍历直接逐个检查每个像素的状态,能精准定位单个坏点,同时准确统计总有效像素数,完全匹配需求:
- 先验证输入图像尺寸是否为160×320(高度×宽度),确保检测对象正确
- 遍历图像的每个像素坐标(x,y)
- 根据显示屏显示的纯色模式(如绿色、红色、蓝色),设定正常像素的灰度/颜色阈值,判断当前像素是否为坏点(黑屏像素灰度值远低于正常,颜色异常像素偏离标准色)
- 统计总有效像素数,对比51200验证完整性
- 记录所有坏点的坐标,并在图像上标记坏点位置
完整代码实现
import cv2 import numpy as np def display_bad_pixel_detection(image_path, expected_width=320, expected_height=160, threshold=120): # 读取图像,以灰度模式读取(纯色模式下灰度值足够判断) img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE) if img is None: print("无法读取图像文件") return # 验证图像尺寸 height, width = img.shape if width != expected_width or height != expected_height: print(f"图像尺寸不符:实际{width}×{height},预期{expected_width}×{expected_height}") return total_expected_pixels = expected_width * expected_height bad_pixels = [] valid_pixels = 0 # 遍历每个像素 for y in range(height): for x in range(width): pixel_value = img[y, x] # 纯色模式下,正常像素灰度值应高于阈值(黑屏/坏点灰度低) if pixel_value >= threshold: valid_pixels += 1 else: bad_pixels.append((x, y)) # 输出验证结果 print(f"预期总像素数:{total_expected_pixels}") print(f"实际有效像素数:{valid_pixels}") print(f"缺失/坏点数量:{len(bad_pixels)}") if len(bad_pixels) > 0: print("坏点坐标列表:") for idx, (x, y) in enumerate(bad_pixels): print(f"坏点{idx+1}:({x}, {y})") # 标记坏点并保存结果图像 color_img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) for (x, y) in bad_pixels: # 用红色圆点标记坏点 cv2.circle(color_img, (x, y), 1, (0, 0, 255), -1) cv2.imwrite("bad_pixel_marked.bmp", color_img) print("标记后的图像已保存为bad_pixel_marked.bmp") # 示例调用:替换为你的图像路径 display_bad_pixel_detection("images/green-good.bmp")
代码说明
- 尺寸验证:首先检查图像是否符合160×320的规格,避免检测错误的图像
- 像素遍历:双重循环遍历每个像素的(x,y)坐标,x对应宽度方向,y对应高度方向
- 坏点判断:针对纯色显示模式,用灰度阈值区分正常像素和坏点(可根据实际显示颜色调整阈值,比如红色模式可能阈值范围不同)
- 结果输出:统计有效像素数、坏点数量,输出每个坏点的精确坐标
- 可视化标记:在图像上用红色圆点标记坏点,便于直观查看
扩展优化
- 支持多颜色模式检测:可添加参数切换灰度阈值或直接判断RGB颜色值,适配红、绿、蓝等不同纯色测试模式
- 批量处理:遍历文件夹内的所有测试图像,自动生成检测报告
- 阈值自适应:通过分析正常区域的像素值分布,自动计算最优阈值,避免手动调整
内容的提问来源于stack exchange,提问作者Guilherme Mendes
相关产品推荐
相关产品推荐

