首页 > 解决方案 > 安装在汽车上的摄像头遮挡检测

问题描述

我正在开发一种使用 python OpenCV 检测相机阻塞的算法。

实际上,由于我不擅长计算机视觉,但我不确定我提出的算法是否合适。

任何人都可以看看我制作的代码吗?

def detectCameraBlockage_absdiff():

cnt = 0
cap = cv2.VideoCapture(0)
# print('width: ', cap.get(3))
# print('height: ', cap.get(4))
IMAGE_WIDTH = cap.get(3)
IMAGE_HEIGHT = cap.get(4)
background = np.zeros((480, 640))

while True:
    if cnt == 0:
        cnt += 1
        pass

    else:
        ret, frame = cap.read()
        # frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        if ret:
            cv2.imshow('if you want to quit press the key [q]', frame)
            # cv2.imshow('if you want to quit press the key [q]', frame[:, :, 0])

            mean_frame = frame.mean(axis=2)
            # cv2.imshow('mean_frame', mean_frame)

            diff = cv2.absdiff(background, mean_frame)
            # print(type(diff))
            cv2.imshow('diff', diff)
            _, diff = cv2.threshold(diff, 30, 255, cv2.THRESH_BINARY)
            # print(type(_), type(diff), sep='\n') #float, ndarray



            if cnt%10 == 0:
                background = mean_frame

            cnt += 1
            print('cnt: ', cnt)

            if cv2.waitKey(1) == ord('q'):
                break            

        else:
            print('camera failed.')
            break    

这段代码对我不起作用。

我想不出我应该如何处理那些像素值来获得没有阻塞的图像和有阻塞的图像之间的差异。

标签: pythonopencvcomputer-vision

解决方案


一个想法是测量参考图像和当前图像之间的相似性。参考图像将是没有阻塞的图像。

如果您的相机是静态的,实现它的简单方法是使用 SSIM ( https://docs.opencv.org/4.5.2/d5/dc4/tutorial_video_input_psnr_ssim.html )。


推荐阅读