首页 > 其他分享 >修改colmap database.db的相机参数

修改colmap database.db的相机参数

时间:2023-02-21 16:34:19浏览次数:60  
标签:database CREATE db self camera image TABLE colmap id

参考链接,scripts/python/database.py


import sys
import sqlite3
import numpy as np


IS_PYTHON3 = sys.version_info[0] >= 3

MAX_IMAGE_ID = 2**31 - 1

CREATE_CAMERAS_TABLE = """CREATE TABLE IF NOT EXISTS cameras (
    camera_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    model INTEGER NOT NULL,
    width INTEGER NOT NULL,
    height INTEGER NOT NULL,
    params BLOB,
    prior_focal_length INTEGER NOT NULL)"""

CREATE_DESCRIPTORS_TABLE = """CREATE TABLE IF NOT EXISTS descriptors (
    image_id INTEGER PRIMARY KEY NOT NULL,
    rows INTEGER NOT NULL,
    cols INTEGER NOT NULL,
    data BLOB,
    FOREIGN KEY(image_id) REFERENCES images(image_id) ON DELETE CASCADE)"""

CREATE_IMAGES_TABLE = """CREATE TABLE IF NOT EXISTS images (
    image_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    name TEXT NOT NULL UNIQUE,
    camera_id INTEGER NOT NULL,
    prior_qw REAL,
    prior_qx REAL,
    prior_qy REAL,
    prior_qz REAL,
    prior_tx REAL,
    prior_ty REAL,
    prior_tz REAL,
    CONSTRAINT image_id_check CHECK(image_id >= 0 and image_id < {}),
    FOREIGN KEY(camera_id) REFERENCES cameras(camera_id))
""".format(MAX_IMAGE_ID)

CREATE_TWO_VIEW_GEOMETRIES_TABLE = """
CREATE TABLE IF NOT EXISTS two_view_geometries (
    pair_id INTEGER PRIMARY KEY NOT NULL,
    rows INTEGER NOT NULL,
    cols INTEGER NOT NULL,
    data BLOB,
    config INTEGER NOT NULL,
    F BLOB,
    E BLOB,
    H BLOB,
    qvec BLOB,
    tvec BLOB)
"""

CREATE_KEYPOINTS_TABLE = """CREATE TABLE IF NOT EXISTS keypoints (
    image_id INTEGER PRIMARY KEY NOT NULL,
    rows INTEGER NOT NULL,
    cols INTEGER NOT NULL,
    data BLOB,
    FOREIGN KEY(image_id) REFERENCES images(image_id) ON DELETE CASCADE)
"""

CREATE_MATCHES_TABLE = """CREATE TABLE IF NOT EXISTS matches (
    pair_id INTEGER PRIMARY KEY NOT NULL,
    rows INTEGER NOT NULL,
    cols INTEGER NOT NULL,
    data BLOB)"""

CREATE_NAME_INDEX = \
    "CREATE UNIQUE INDEX IF NOT EXISTS index_name ON images(name)"

CREATE_ALL = "; ".join([
    CREATE_CAMERAS_TABLE,
    CREATE_IMAGES_TABLE,
    CREATE_KEYPOINTS_TABLE,
    CREATE_DESCRIPTORS_TABLE,
    CREATE_MATCHES_TABLE,
    CREATE_TWO_VIEW_GEOMETRIES_TABLE,
    CREATE_NAME_INDEX
])


def image_ids_to_pair_id(image_id1, image_id2):
    if image_id1 > image_id2:
        image_id1, image_id2 = image_id2, image_id1
    return image_id1 * MAX_IMAGE_ID + image_id2


def pair_id_to_image_ids(pair_id):
    image_id2 = pair_id % MAX_IMAGE_ID
    image_id1 = (pair_id - image_id2) / MAX_IMAGE_ID
    return image_id1, image_id2


def array_to_blob(array):
    if IS_PYTHON3:
        return array.tostring()
    else:
        return np.getbuffer(array)


def blob_to_array(blob, dtype, shape=(-1,)):
    if IS_PYTHON3:
        return np.fromstring(blob, dtype=dtype).reshape(*shape)
    else:
        return np.frombuffer(blob, dtype=dtype).reshape(*shape)


class COLMAPDatabase(sqlite3.Connection):

    @staticmethod
    def connect(database_path):
        return sqlite3.connect(database_path, factory=COLMAPDatabase)


    def __init__(self, *args, **kwargs):
        super(COLMAPDatabase, self).__init__(*args, **kwargs)

        self.create_tables = lambda: self.executescript(CREATE_ALL)
        self.create_cameras_table = \
            lambda: self.executescript(CREATE_CAMERAS_TABLE)
        self.create_descriptors_table = \
            lambda: self.executescript(CREATE_DESCRIPTORS_TABLE)
        self.create_images_table = \
            lambda: self.executescript(CREATE_IMAGES_TABLE)
        self.create_two_view_geometries_table = \
            lambda: self.executescript(CREATE_TWO_VIEW_GEOMETRIES_TABLE)
        self.create_keypoints_table = \
            lambda: self.executescript(CREATE_KEYPOINTS_TABLE)
        self.create_matches_table = \
            lambda: self.executescript(CREATE_MATCHES_TABLE)
        self.create_name_index = lambda: self.executescript(CREATE_NAME_INDEX)

    def add_camera(self, model, width, height, params,
                   prior_focal_length=False, camera_id=None):
        params = np.asarray(params, np.float64)
        cursor = self.execute(
            "INSERT INTO cameras VALUES (?, ?, ?, ?, ?, ?)",
            (camera_id, model, width, height, array_to_blob(params),
             prior_focal_length))
        return cursor.lastrowid
    def updata_camera(self, model, width, height, params,
                   prior_focal_length=False, camera_id=None):
        params = np.asarray(params, np.float64)
        sql = "UPDATE cameras SET model=?, width=?, height=?, params=?, prior_focal_length=? WHERE camera_id=?;"
        # db.execute( sql, (model, width, height, array_to_blob(cameraParam), prior, camera_id))
        cursor = self.execute(
            sql,
            (model, width, height, array_to_blob(params),
             prior_focal_length, camera_id))
        return camera_id
    def delete_all_camera(self):
        cursor = self.execute("DELETE FROM cameras;")
        return cursor.lastrowid




def example_usage():
    import os
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument("--database_path", default="database.db")
    args = parser.parse_args()


    # Open the database.

    db = COLMAPDatabase.connect(args.database_path)
    db.create_tables()

    
    # db.commit()

    cameraParam = np.array((1528.62,1531.41,960,540,-0.358007,0.125466,4.2964e-05,0.00134912))

    rows = db.execute("SELECT * FROM cameras")
    camera_id, model, width, height, params, prior = next(rows)
    # params = blob_to_array(params, np.float64)
    # print(camera_id, " ",params)

    
    for camera_id in range(1, 10):
        camera_id = db.updata_camera(model, width, height, cameraParam, prior,camera_id)
        # # Commit the data to the file.
        db.commit() 


    rows = db.execute("SELECT * FROM cameras")
    for camera_id in range(1, 10):

        camera_id, model, width, height, params, prior = next(rows)
        params = blob_to_array(params, np.float64)
        print(camera_id, " model:", model , " width:", width ," params:",params)


    # Clean up.
    db.close()



if __name__ == "__main__":
    example_usage()

标签:database,CREATE,db,self,camera,image,TABLE,colmap,id
From: https://www.cnblogs.com/xiaohuidi/p/17141472.html

相关文章

  • CouchDB 漏洞复现 CVE-2017-12635/12636
    前言CouchDB是一个开源的面向文档的数据库管理系统,可以通过RESTfulJavaScriptObjectNotation (JSON)API 访问。CVE-2017-12635是由于Erlang和JavaScript对JSON解......
  • Android和adb命令
    一、名词解释1、SDK:是软件开发工具包2、activity(活动):驱使软件运行的一段程序,软件系统和用户进行交互的界面叫一个活动二、adb命令1、查看连接的设备:adbdevices2、......
  • CentOS7 yum安装MongoDB
    1、配置MongoDB的yum源cd/etc/yum.repos.dvimmongodb-org-6.0.repo2、添加下载配置文件(这里使用阿里云的源),保存退出[mngodb-org]name=MongoDBRepositorybaseur......
  • com.mysql.jdbc.PacketTooBigException,及mysql 设置 max_allow_packet
    本文为博主原创,未经允许不得转载:     在进行批量导入表格数据入库操作时,报了以下错误: 错误分析:       mysql根据配置文件会限制server接受的数据包大小。有......
  • Modbus TCP / BACnet IP 网关BMT-370
    基本说明:BMT-370是BACnetIP从站协议与ModbusTCP主站协议转换的通信网关,可以实现BACnetIP主站与多个ModbusTCP从站之间的数据通信。同时该网关的以太网端支持双以太网......
  • MongoDB使用记录
    查询publicList<CheckDataEntity>GetList(){Int64startTime=Stopwatch.GetTimestamp();//获取计时器机制中当前时间的最小单位数可以理解为时钟周期......
  • JDBC工具类
    当完成JDBC操纵时,代码重复度特别高这是之前代码   内容非常的繁琐,每一次都需要重新数据库,每一次都得释放资源。所以有一个工具类packageutil;importjava.io.F......
  • exception during geoip databases update
    报错描述:[2023-02-19T16:16:39,957][ERROR][o.e.i.g.GeoIpDownloader][CP]exceptionduringgeoipdatabasesupdatejavax.net.ssl.SSLHandshakeException:sun.sec......
  • jdbc学习笔记
    JDBC尚硅谷https://www.bilibili.com/video/BV1sK411B71e?share_source=copy_web概述JDBC是连接Java和数据库的必要纽带MyBatis、HIBERNATE等都是封装了JDBC的应......
  • 【JDBC:数据库连接池,数据库驱动】
    一:什么是JDBC?1.JDBC(JavaDataBaseConnectivity,java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成......