背景
我们的相机与闪光灯之间必须实现精密的同步,以防止时序上的任何偏差导致成像出现问题,比如生成黑暗的照片。为此,我们计划开发一个自动化测试工具,它能检测10万张图片中是否存在暗图现象。
代码
python
import cv2
import numpy as np
def process_frame(frame):
# 你的帧处理代码
return cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
def is_dark(frame, threshold=30):
"""
检查图像是否暗。
:param frame: 灰度图像。
:param threshold: 判断图像为暗图的亮度阈值。
:return: 如果图像暗返回True,否则返回False。
"""
if len(frame.shape) == 2 or frame.shape[2] == 1:
gray_frame = frame
else:
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
average_brightness = np.mean(gray_frame)
return average_brightness < threshold
def main():
rtsp_url = "rtsp://192.168.1.6/live/ch00_0" # 替换成你的RTSP流地址
cap = cv2.VideoCapture(rtsp_url)
if not cap.isOpened():
print("无法打开视频流或文件")
return
while True:
ret, frame = cap.read()
if not ret:
break
processed_frame = process_frame(frame)
# 检查当前帧是否过暗
if is_dark(processed_frame):
print("检测到暗图")
# 显示处理后的帧
cv2.imshow('Processed Frame', processed_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
注意 FAQ
- 当您注释掉
if cv2.waitKey(1) & 0xFF == ord('q'):
这行代码后,遇到的问题可能是由于缺少了 OpenCV 窗口的更新机制。在 OpenCV 中,cv2.waitKey() 函数不仅用于检测按键输入,还负责处理窗口的事件,比如刷新显示的图像;如果不需要退出机制,可以修改为cv2.waitKey(1)
即可;