(单/双目)图像标定全流程(python/C++/Opencv实现)---代码篇(2)

一、实例重现

运用opencv samples中的例子直接进行图像双目标定,具体参考可参考博客:OpenCV3.2.0 双目标定+立体匹配
(1)先到OpenCV源码目录下(…/opencv-3.4.3/samples/cpp)找到stereo_calib.cpp。
(2)找到标定模板图像(…/opencv-3.4.3/samples/data)和stereo_calib.xml,直接进行编译。

g++ `pkg-config --cflags opencv` -o stereo_calib stereo_calib.cpp `pkg-config --libs opencv`
./stereo_calib

(3)结果展示
在这里插入图片描述
在这里插入图片描述

应用

在这里插入图片描述
(1)创建符合要求的xml文件
实例中的xml格式如下,左右相机拍摄的相配图像交替展示。
在这里插入图片描述
应用自己的数据集,生成xml如下所示
在这里插入图片描述
具体代码实现如下:

#encoding:utf-8
'''
根据一个给定的XML Schema,使用DOM树的形式从空白文件生成一个XML。
'''
import xml.dom.minidom as minidom
import os
# 创建文档
dom = minidom.getDOMImplementation().createDocument(None,'opencv_storage',None)
# 获得根节点
root = dom.documentElement
# 创建节点
key = dom.createElement('imagelist')
dir = "/home/crj/calibration/calibration_crj/img_all"
for _, _, files in os.walk(dir):
    files.sort()
    for n, file in enumerate(files):
        if (os.path.splitext(file)[1] == '.jpg') & (n< len(files)/2):
            key_text1 = dom.createTextNode(files[n])
            key.appendChild(key_text1)
            key_text2 = dom.createTextNode(files[n+13])
            key.appendChild(key_text2)

root.appendChild(key)

f = open('stereo_calib.xml','w')
#f.write(doc.toprettyxml(indent = '\t', newl = '\n', encoding = 'utf-8'))
dom.writexml(f,indent = '\t',newl = '\n', addindent = '\t',encoding='utf-8')
f.close()

用自带的例子显示效果不好,留待以后研究,盖个戳,有大佬指导,不胜感激!!!!

猜你喜欢

转载自blog.csdn.net/u010801994/article/details/84592378