基于matlab的单目相机标定

链接:
单目相机标定(使用Matlab)
用Matlab对单目相机参数的标定步骤(保姆级教程)

1.准备代码

调用摄像头代码(用于测试摄像头是否可用):

python 复制代码
#https://blog.csdn.net/qq_37759113/article/details/124366513
import cv2

def read_usb_capture():
    # 选择摄像头的编号
    camera = cv2.VideoCapture(0)
    # # 设置分辨率
    #camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
    #camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 960)
    camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1200)
    camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 900)
    # 添加这句是可以用鼠标拖动弹出的窗体
    cv2.namedWindow('real_img', cv2.WINDOW_NORMAL)

    while(camera.isOpened()):
        # 读取摄像头的画面
        ret, frame = camera.read()
        # 真实图
        cv2.imshow('real_img', frame)
        # 按下'q'就退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    # 释放画面
    camera.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    read_usb_capture()

使用摄像头拍照代码:

python 复制代码
#https://www.jb51.net/article/256780.htm
import cv2
import sys
#引入库

cap = cv2.VideoCapture(0) #读取笔记本内置摄像头或者0号摄像头


i = 0
while True:
    ret, frame = cap.read()
    
    if (ret):
        cv2.namedWindow("Video01",0)   #创建一个名为Video01的窗口,0表示窗口大小可调
        #cv2.resizeWindow("Video01",640,480) ##创建一个名为Video01的窗口,设置窗口大小为 1920 * 1080 与上一个设置的 0 有冲突
        #cv2.resizeWindow("Video01",640,330)
        cv2.imshow("Video01", frame)

        #等待按键按下
        c = cv2.waitKey(1) & 0xff

        #若按下w则保存一张照片
        if c ==ord("w"):
            cv2.imwrite("C:/Users/wuxiao/Desktop/test/%d.bmp" %i, frame) #自己设置拍摄的照片的存储位置
            print("Save images %d succeed!" %i)
            i+=1

        #若按下Q键,则退出循环
        if c == ord("q"):
            break
    
#随时准备按q退出
cap.release()
#关掉所有窗口
cv2.destroyAllWindows()

图像剪裁代码(用于双目相机):

python 复制代码
#https://www.jb51.net/article/256780.htm
import numpy as np
import cv2

#img1 = cv2.imread(r"/Users/inbc/Desktop/zuo/Left1.bmp")
#img2 = cv2.imread(r"/Users/inbc/Desktop/you/Right1.bmp")
for i in range(0,31) :
    #imgT = cv2.imdecode(np.fromfile('./images/%d.bmp'  %i ,dtype=np.uint8), -1)
    imgT = cv2.imdecode(np.fromfile('C:/Users/wuxiao/Desktop/stereo/%d.bmp'  %i ,dtype=np.uint8), -1) #读取拍摄的左右双目照片

    # cv2.imshow("zuo", img1[300:1200, 500:2000])
    # cv2.imshow("you", img2[300:1200, 500:2000])

    # cv2.waitKey(0)
    
    #设置左右照片的存储位置
    cv2.imwrite("C:/Users/wuxiao/Desktop/stereo/zuo/reLeft%d.bmp"  %i  ,imgT[0:480, 0:320] )#imgL的第一个参数是图片高度像素范围,第二个参数是图片宽度的像素范围
    cv2.imwrite("C:/Users/wuxiao/Desktop/stereo/you/reRight%d.bmp" %i ,imgT[0:480, 320:640] )
    print("Resize images%d Fnished!" %i)

print("Fnished All!!!")

2.具体操作

链接:
单目相机标定(使用Matlab)
用Matlab对单目相机参数的标定步骤(保姆级教程)

补充:

2.1. 删除误差过大的图片的操作

如右上角所示,单张图像误差会有较大的,点击柱状图中误差较大的一项,在最左边会蓝色显示该图片,右键点击"Remove and Recalibrate"即可删去该图(即计算内参时不考虑该图)

2.2. 内参中需要关注的三组参数

直接在命令行内输入:

matlab 复制代码
cameraParams.IntrinsicMatrix%相机内参
cameraParams.RadialDistortion%相机径向畸变参数
cameraParams.TangentialDistortion%相机切向畸变参数

注意

matlab计算的内参矩阵与opencv的内参数据互为转置关系

相关推荐
胡西风_foxww1 小时前
Java的extends通配符
java·开发语言·通配符·extends
胡萝卜的兔2 小时前
golang -gorm 增删改查操作,事务操作
开发语言·后端·golang
屁股割了还要学2 小时前
快速过一遍Python基础语法
开发语言·python·学习·青少年编程
武当豆豆3 小时前
C++编程学习阶段性总结
开发语言·c++
学不动CV了4 小时前
C语言32个关键字
c语言·开发语言·arm开发·单片机·算法
你怎么知道我是队长4 小时前
python-enumrate函数
开发语言·chrome·python
小屁孩大帅-杨一凡4 小时前
如何解决ThreadLocal内存泄漏问题?
java·开发语言·jvm·算法
大熋4 小时前
Playwright Python 教程:网页自动化
开发语言·python·自动化
赟赟、嵌入式5 小时前
imx6ul Qt运行qml报错This plugin does not support createPlatformOpenGLContext!
开发语言·qt
cdg==吃蛋糕5 小时前
selenium 使用方法
开发语言·python