基于Deepsocial做社交安全距离监测时,先使用目标检测器检测出画面中的行人,然后建立从摄像机—透视图到逆透视—鸟瞰图的坐标映射,将摄像机拍摄画面中的行人坐标转换为鸟瞰图上的坐标,从而计算行人之间的距离。
先看一下原图:
想要把透视图转化为鸟瞰图,有两种做法:
1.在没有标定的情况下,只能选取四个点对
2.在有标定的情况下,可以直接使用标定的参数**
先不讲理论细节,先看第一个方法,直接看opencv的操作(使用图片Deepsocial使用的视频图片,以及Deepsocial中的标定坐标),首先需要以下条件:
1、在摄像机拍摄的图像上,比如在960*540的图像上选取四个角点,例如:
# 左上角、右上角、左下角、右下角
source = np.float32([[0, 0],[960, 0], [0, 540], [960,540]]
如图所示:
2、测量出四个点的实际坐标,例如:
target = np.float32([[180,162],[618,0],[552,540],[682,464]])
测量方式如下:
(待考究!!!)
先看一下转换后的鸟瞰图:
具体过程如下:
1、上述角点设置完毕后,通过pts1、pts2求出透视变换矩阵:
cv2.getPerspectiveTransform(source,