opencv 魚眼圖像的矯正(動態參數調整)

一:棋盤校準參數說明(內參)

棋盤校準的方法及代碼很多,參見其他連接

1:內參矩陣

2:畸變系數

針對魚眼相機此處是4個參數,在其校準代碼中也可以知道,其通常的定義如下:

 ? ? ? data.camera_mat = np.eye(3, 3)data.dist_coeff = np.zeros((4, 1))

二:基于生成的參數D和K進行調整

直接上代碼,

import os
import numpy as np
import cv2
#下面的值是來自棋盤格校準后的內參矩陣K
initial_camera_matrix = np.array([[389.3455401867884, 0.0, 630.3678577531273],[0.0, 388.5686773894828, 361.167452606629],[0.0, 0.0, 1.0]])camera_mat = np.array([[302.116935,0.0,521.926531],[  0.0, 358.512097, 363.652721],[  0.0, 0.0,     1.0      ]])#下面的值是來自棋盤格校準后的D
dist_coeff = np.array([[0.05648235312901486],[-0.024826520405491565],[-0.002416551582982325],[0.0010672440368159684]])def adjust_parameters(x):
# 獲取當前滑動條的值fx = cv2.getTrackbarPos('fx', 'Parameters')/ 100.0 fy = cv2.getTrackbarPos('fy', 'Parameters')/ 100.0 cx = cv2.getTrackbarPos('cx', 'Parameters')/ 100.0 cy = cv2.getTrackbarPos('cy', 'Parameters')/ 100.0 k1 = cv2.getTrackbarPos('k1', 'Parameters') / 2000000  # 調整范圍以便于滑動條控制k2 = cv2.getTrackbarPos('k2', 'Parameters') / 2000000p1 = cv2.getTrackbarPos('p1', 'Parameters') / 2000000p2 = cv2.getTrackbarPos('p2', 'Parameters') / 2000000# 更新相機矩陣和畸變系數new_camera_matrix = np.array([[fx, 0.0, cx],[0.0, fy, cy],[0.0, 0.0, 1.0]])new_distortion_coeff = np.array([[k1], [-k2], [-p1], [p2]])map1, map2 = cv2.fisheye.initUndistortRectifyMap(initial_camera_matrix, new_distortion_coeff, np.eye(3, 3), new_camera_matrix, (args.width * args.sizescale, args.height * args.sizescale), cv2.CV_16SC2) img = np.load("./calibrate_img/img_cam5.npy")print(new_camera_matrix)print(new_distortion_coeff)undistort_img = cv2.remap(img, map1, map2, cv2.INTER_LINEAR)undistort_img=cv2.resize(undistort_img,(img.shape[1],img.shape[0]))cv2.imshow("undistort_img",undistort_img)cv2.imshow("src_img",img)def main():cv2.namedWindow('Parameters')# 添加相機矩陣的滑動條cv2.createTrackbar('fx', 'Parameters', int(camera_mat[0, 0]* 10000), 90*100000, adjust_parameters)cv2.createTrackbar('fy', 'Parameters', int(camera_mat[1, 1]* 10000), 90*100000, adjust_parameters)cv2.createTrackbar('cx', 'Parameters', int(camera_mat[0, 2]* 10000), 90*1000000, adjust_parameters)cv2.createTrackbar('cy', 'Parameters', int(camera_mat[1, 2]* 10000), 90*100000, adjust_parameters)# 添加畸變系數的滑動條cv2.createTrackbar('k1', 'Parameters', int(dist_coeff[0, 0] * 100000), 4000000, adjust_parameters)cv2.createTrackbar('k2', 'Parameters', int(dist_coeff[1, 0] * 100000), 4000000, adjust_parameters)cv2.createTrackbar('p1', 'Parameters', int(dist_coeff[2, 0] * 100000), 4000000, adjust_parameters)cv2.createTrackbar('p2', 'Parameters', int(dist_coeff[3, 0] * 100000), 4000000, adjust_parameters)while True:key = cv2.waitKey(1) & 0xFFif key == ord('q'):breakcv2.destroyAllWindows()  if __name__ == '__main__':main()    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43296.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43296.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

報修小程序論文(設計)開題報告

一、課題的背景和意義 近些年來,隨著移動互聯網巔峰時期的來臨,互聯網產業逐漸趨于“小、輕、微”的方向發展,符合輕應用時代特點的各類技術受到了不同領域的廣泛關注。在諸多產品中,被譽為“運行著程序的網站”之名的微信小程序…

uniapp-小程序獲取用戶位置

1. 需要在微信公眾平臺進行接口的申請。選擇自己需要用的接口。 2. 在app.json文件中配置permission和requiredPrivateInfos。requiredPrivateInfos里面是你需要使用的接口。 3. 配置完成后,就可以使用了。 相關獲取位置API的鏈接 4. 如果要獲取當前位置到某一個指…

【在 OpenResty 中使用 Lua 獲取服務器自身的 IP 地址】

要在 OpenResty 中使用 Lua 獲取服務器自身的 IP 地址,可以使用 Lua 結合系統命令來獲取本地網絡接口的 IP 地址。以下是一個示例,展示如何實現這一點: 修改你的 nginx.conf 文件,添加一個新的 location 塊來處理獲取本地 IP 地址…

java順序表的實現

一,前言 hello大家好呀,今天淺略講講java的順序表,其實順序表大概一個月前就學了,但是由于前段時間期末一直沒寫博客,但是現在想想其實期末我還是有很多空余時間的,但是由于自己的原因耽誤了很多時間現在想…

C++面向對象的常見面試題目(二)

1. 繼承關系下,析構函數和構造函數執行順序? 構造函數按照依賴鏈,從強到弱構造 首先調用基類的構造函數。如果有多個基類,則按照它們在派生類聲明中出現的順序調用;接下來,按照它們在類中聲明的順序&…

windows USB 設備驅動開發-處理批傳輸的靜態流

在 USB 2.0 和更早版本的設備中,批量端點可以通過該端點發送或接收單個數據流。 在 USB 3.0 設備中,批量端點能夠通過該端點發送和接收多個數據流。 Windows 中 Microsoft 提供的 USB 驅動程序堆棧支持多個流。 這使客戶端驅動程序能夠將獨立的 I/O 請求…

GEE代碼實例教程詳解:長時間序列風速分析

簡介 在本篇博客中,我們將使用Google Earth Engine (GEE) 對長時間序列的風速數據進行分析。通過ERA5再分析數據集,我們可以計算2010年至2024年間的平均風速,并與1980年至2020年的風速數據進行比較。 背景知識 ERA5數據集 ERA5是ECMWF&am…

代碼隨想錄-Day53

739. 每日溫度 給定一個整數數組 temperatures ,表示每天的溫度,返回一個數組 answer ,其中 answer[i] 是指對于第 i 天,下一個更高溫度出現在幾天后。如果氣溫在這之后都不會升高,請在該位置用 0 來代替。 示例 1: …

【Linux】目錄的相關命令——cd,pwd,mkdir,rmdir

1.相對路徑與絕對路徑 在開始目錄的切換之前,你必須要先了解一下所謂的路徑(PATH),有趣的是:什么是相對路 與絕對路徑? 絕對路徑:路徑的寫法“一定由根目錄/寫起”,例如:/usr/shar…

Java版Flink使用指南——定制RabbitMQ數據源的序列化器

大綱 新建工程新增依賴數據對象序列化器接入數據源 測試修改Slot個數打包、提交、運行 工程代碼 在《Java版Flink使用指南——從RabbitMQ中隊列中接入消息流》一文中,我們從RabbitMQ隊列中讀取了字符串型數據。如果我們希望讀取的數據被自動化轉換為一個對象&#x…

Linux C++ 043-機房預約系統

Linux C 043-機房預約系統 本節關鍵字:Linux、C、機房預約系統 相關庫函數:for_each、open、close、write 系統簡介 學校現在有幾個規格不同的機房,由于使用經常出現撞車現象,現開發一套機房預約系統,解決這一問題。…

Java進階---抽象方法abstract

抽象方法 案例引入: 在某個寵物店的寵物資源管理系統中有: 狗類:屬性(姓名),行為(吃飯) 貓類:屬性(姓名),行為(吃飯)利用…

智慧科技照亮水利未來:深入剖析智慧水利解決方案如何助力水利行業實現高效、精準、可持續的管理

目錄 一、智慧水利的概念與內涵 二、智慧水利解決方案的核心要素 1. 物聯網技術:構建全面感知網絡 2. 大數據與云計算:實現數據高效處理與存儲 3. GIS與三維可視化:提升決策支持能力 4. 人工智能與機器學習:驅動決策智能化 …

LibreOffice的國內鏡像安裝地址和node.js國內快速下載網站

文章目錄 1、LibreOffice1.1、LibreOffice在application-conf.yml中的配置2、node.js 1、LibreOffice 國內鏡像包網址:https://mirrors.cloud.tencent.com/libreoffice/libreoffice/ 1.1、LibreOffice在application-conf.yml中的配置 jodconverter:local:enable…

Java面試八股之MySQL中int(10)和bigint(10)能存儲讀的數據大小一樣嗎

MySQL中int(10)和bigint(10)能存儲讀的數據大小一樣嗎 在MySQL中,int(10)和bigint(10)的數據存儲能力并不相同,盡管括號內的數字(如10)看起來似乎暗示著某種關聯,但實際上這個數字代表的是顯示寬度,而不是…

vue學習day03-指令修飾符、v-bind對于樣式控制的增強、v-model應用于其他表單元素

7、指令修飾符 (1)概念: 通過“.”指明一些指令后綴,不同后綴封裝了不同的處理操作->簡化代碼 (2)按鍵修飾符 keyup.enter->鍵盤回車監聽 (3)v-model修飾符 v-model.tri…

vue + element ui 實現側邊欄導航欄折疊收起

首頁布局如下 要求點擊按鈕,將側邊欄收縮, 通過 row 和 col 組件&#xff0c;并通過 col 組件的 span 屬性我們就可以自由地組合布局。 折疊前 折疊后 <template><div class"app-layout" :class"{ collapse: app.isFold }"><div class&…

Onekey正版steam分流下載工具

今天給大家介紹的是一款下載steam游戲的工具。Onekey工具&#xff0c;是一款游戲下載器&#xff0c;可以下載steam正版分流游戲。下載正版分流的網站很多&#xff0c;但是都是網盤或者迅雷下載&#xff0c;或者游戲盒子下載&#xff0c;速度都很慢。這款軟件是用steam下載的&am…

Flask項目搭建及部署 —— Python

flask搭建及部署 pip 19.2.3 python 3.7.5 Flask 1.1.1 Flask-SQLAlchemy 2.4.1 Pika 1.1.0 Redis 3.3.11 flask-wtf 0.14.2 1、創建flask項目&#xff1a; 創建完成后整個項目結構樹&#xff1a; app.py: 項?管理?件&#xff0c;通過它管理項?。 static: 存放靜態…

自定義控件視圖篇(一)測量與布局

在自定義控件的開發過程中&#xff0c;"視圖篇"的測量與布局是非常關鍵的步驟&#xff0c;這直接決定了控件的尺寸、位置以及子視圖的排列方式。下面我將詳細介紹測量和布局的過程&#xff0c;以及如何在自定義控件中正確實現這些步驟。 視圖的測量 (onMeasure) 在…