python - 安装在汽车上的摄像头遮挡检测
问题描述
我正在开发一种使用 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 )。
推荐阅读
- spring-boot - 非 bean 属性抛出 Bean 属性不可读或具有无效的 getter 方法
- entity-framework - 处理具有通用类约束的多个 EF Core 存储库的依赖注入
- vb.net - keydown 时如何检测我的datagridview?
- java - Fongo - Fake Mongo:无法从位置加载数据集以使用 fongo 对 mongrepository 进行单元测试
- bash - 如何检查两个设备是否安装在 macOS 中?
- assembly - 什么时候在汇编语言中使用扩展移动指令
- sql - SELECT where not in other table with COLLATE
- php - 为什么我有这个卷曲的问题?
- docker - 如何创建 docker 映像的临时实例并在 Azure Pipeline 中的实例上执行命令?
- python - 如何在不根据距离缩放的情况下创建从字符到目标的单位向量?