基于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的内参数据互为转置关系

相关推荐
丰锋ff10 小时前
基于 Qt 的智慧社区物业管理系统
开发语言·qt
夜不会漫长11 小时前
C++入门(1)
开发语言·c++·算法
大鹏说大话11 小时前
从爬虫到决策引擎:大数据下自媒体如何用Python挖掘用户痛点
开发语言·爬虫·python
Niuguangshuo11 小时前
silero-vad:超轻量级开源 VAD 实践指南
开发语言·python
哭哭啼11 小时前
JAVA服务问题诊断
java·开发语言·jvm
程高兴12 小时前
三相两电平光伏MPPT定步长扰动观察法Simulink
matlab
..Dauntless..13 小时前
【C++】继承——基类和派生类的配合
开发语言·c++·算法
CRMEB定制开发13 小时前
2026年最值得推荐的10大开源商城系统盘点
开发语言·人工智能·开源·商城系统·小程序商城
buhuizhiyuci14 小时前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
Littlehero_12115 小时前
QT自定义控件之热换站系统(源码开源)
开发语言·qt