安装在汽车上的摄像头遮挡检测
Camera blockage detection that is mounted on a car
我正在开发一种算法,该算法使用 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
此代码对我不起作用。
我想不出我应该如何处理该像素值来区分没有阻塞的图像和有阻塞的图像。
一个想法是测量参考图像和当前图像之间的相似性。参考图像将是没有遮挡的图像。
如果你的相机是静态的,一个简单的实现方法是使用 SSIM (https://docs.opencv.org/4.5.2/d5/dc4/tutorial_video_input_psnr_ssim.html)。
我正在开发一种算法,该算法使用 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
此代码对我不起作用。
我想不出我应该如何处理该像素值来区分没有阻塞的图像和有阻塞的图像。
一个想法是测量参考图像和当前图像之间的相似性。参考图像将是没有遮挡的图像。
如果你的相机是静态的,一个简单的实现方法是使用 SSIM (https://docs.opencv.org/4.5.2/d5/dc4/tutorial_video_input_psnr_ssim.html)。