0. 内容
可用于相机标定图片筛选
相机标定
三维点重投影会二维图像
绘制Z平面以及连接线
注意:该标定方法适用于畸变较小得普通相机,鱼眼相机标定如下:Opencv相机标定(2):鱼眼相机校正_m0_58772523的博客-优快云博客...
1. 图片筛选
利用opencv中findChessboardCorners判断图片是否可以检测到对应角点,若检测到角点ret值为True,当检测不到角点时删除对应图片。
import os
import cv2
import glob
def delete_pic(inter_corner_shape, img_dir, img_type):
images = glob.glob(img_dir + os.sep + '**.' + img_type)
for fname in images:
img = cv2.imread(fname)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, cp_img = cv2.findChessboardCorners(gray_img,
(inter_corner_shape[0], inter_corner_shape[1]), None)
if not ret:
os.remove(fname)
if __name__ == '__main__':
inter_corner_shape = (9, 6)
img_dir = "./data"
img_type = "jpg"
delete_pic(inter_corner_shape, img_dir, img_type)
2. 线条和平面绘制辅助函数(含详细注释)
# 二维图片, 图片角点坐标, 所需投影的三维点在图像中的投影点坐标
def draw(img, corners, imgpts):
# 获取第一个图像角点信息
corner = tuple(corners[0].ravel().astype(np.int64))
# 利用第一个图像角点坐标和投影点的坐标绘制想要的直线和平面
# np.ravel()函数为多维数组的维度降为一维
# 新版本的opencv在绘制直线和平面时需手动将坐标信息转为整型,老版本绘制直线