Python-OpenCV棋盘检测

Python-OpenCV棋盘检测/相机标定

操作系统Windows

  • 运行此代码需要预先安装好Python-OpenCV,Python版本为Python3.8

此代码功能为:

  • 使用OpenCV调用摄像头
  • 对摄像头拍摄到的每一帧图片进行张正友棋盘检测,并将检测到的棋盘绘制在图片上
  • 对需要的图片按下键盘s键可以保存到电脑上

优点

  • 降低通过相机拍摄棋盘图片时的废图片率

#*********************************************************************#
#*                           By Huang Wenjun                         *#
#*********************************************************************#
import cv2 as cv
import  numpy as np


# --------------------------------------------------------
# 打开摄像头
cap = cv.VideoCapture(0,cv.CAP_DSHOW)  #更改API设置
flag = cap.isOpened()
cap.set(3, 1280)
cap.set(4, 720)


# --------------------------------------------------------
# 定义棋盘
chessboard_size = (15,13)
a = np.prod(chessboard_size)
# 生成195×3的矩阵,用来保存棋盘图中15*13个内角点的3D坐标,也就是物体点坐标
objp = np.zeros((np.prod(chessboard_size), 3), dtype=np.float32)
# 通过np.mgrid生成对象的xy坐标点,每个棋盘格大小是18mm
# 最终得到z=0的objp为(0,0,0), (1*13,0,0), (2*13,0,0) ,...
objp[:, :2] = np.mgrid[0:chessboard_size[0], 0:chessboard_size[1]].T.reshape(-1, 2) * 18

# 设置终止条件: 迭代3次或者变动 < 0.1
# criteria = None
criteria = (cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 3, 0.1)

obj_points = []  # 保存世界坐标系的三维点
img_points = []  # 保存图片坐标系的二维点




# --------------------------------------------------------
# 检测照片

index = 0
while (flag):
    ret1, frame = cap.read()
    frame_save = frame.copy()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    ret2, corners = cv.findChessboardCorners(gray, chessboard_size, None)
    if ret2 == True:
        obj_points.append(objp)
        # 亚像素级角点检测,在角点检测中精确化角点位置
        corners2 = cv.cornerSubPix(gray, corners, (5, 5), (-1, -1), criteria)
        img_points.append(corners2)

        # 在图中标注角点,方便查看结果
        frame = cv.drawChessboardCorners(frame, chessboard_size, corners2, ret2)
        # img = cv.resize(img, (400,600))


    # frame = cv.flip(frame, 1)  # 水平翻转
    cv.imshow("Capture_Paizhao", frame)
    # print(cap.get(3),cap.get(4))
    k = cv.waitKey(1) & 0xFF
    if k == ord('s'):  # 按下s键,进入下面的保存图片操作
        cv.imwrite(r"F:\PyCharm\Camera_calibration_GIT\class1\0" + str(index) + ".jpg", frame_save)
        print(cap.get(3))
        print(cap.get(4))
        print("save" + str(index) + ".jpg successfuly!")
        print("-------------------------")
        index += 1
    elif k == ord('q'):  # 按下q键,程序退出
        break
cap.release()
cv.destroyAllWindows()

文件下载链接

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hurri_cane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值