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

相关推荐
周杰伦_Jay5 分钟前
【Go微服务框架深度对比】Kratos、Go-Zero、Go-Micro、GoFrame、Sponge五大框架
开发语言·微服务·golang
杰瑞哥哥13 分钟前
标准 Python 项目结构
开发语言·python
shykevin16 分钟前
Rust入门
开发语言·后端·rust
QT 小鲜肉19 分钟前
【个人成长笔记】将Try Ubuntu里面配置好的文件系统克隆在U盘上(创建一个带有持久化功能的Ubuntu Live USB系统)
linux·开发语言·数据库·笔记·ubuntu
Pointer Pursuit24 分钟前
C++——二叉搜索树
开发语言·c++
澪吟28 分钟前
C++ 从入门到进阶:核心知识与学习指南
开发语言·c++
热爱编程的小白白1 小时前
【Playwright自动化】安装和使用
开发语言·python
听风吟丶1 小时前
Java NIO 深度解析:从 BIO 到 NIO 的演进与实战
开发语言·python
学历真的很重要1 小时前
LangChain V1.0 Messages 详细指南
开发语言·后端·语言模型·面试·langchain·职场发展·langgraph
sali-tec1 小时前
C# 基于halcon的视觉工作流-章58-输出点云图
开发语言·人工智能·算法·计算机视觉·c#