欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV實現(xiàn)相機標定

 更新時間:2022年08月02日 08:48:57   作者:Ohayo33  
這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)相機標定,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了OpenCV實現(xiàn)相機標定的具體代碼,供大家參考,具體內容如下

一、相機與針孔相機模型

1.相機模型

現(xiàn)代科技加持下的相機已經成為制造精密設計巧妙的消費品,相機的光學結構也比誕生之初復雜了許多
典型單反相機光學結構:

在眾多相機模型中,針孔相機又稱投影相機模型是相對簡單而常用的模型。簡單的說,針孔相機模型就是把相機簡化成單純的小孔成像,可想而知,這種簡化對于精度要求高的情況或者特殊鏡頭的相機是不適用的。
小孔成像原理:

2.引入透鏡

單純的小孔成像模型中沒有考慮鏡頭,現(xiàn)實條件下,由一片或多片透鏡組成的鏡頭才能讓利用了小孔成像原理的相機成像清晰的同時保持畫面亮度。所以我們需要向模型引入透鏡。
透鏡成像原理:

但是,新的問題也隨之而來:虛焦、畸變
一般我們稱之為徑向畸變,即光線在院里透鏡中的地方比靠近中心的地方更加彎曲。徑向畸變又分為中短焦距、近距離的桶形畸變和長焦距、遠距離會出現(xiàn)的枕形畸變。

二、相機參數(shù)

1.坐標系約定

我們約定三個坐標系

1、世界坐標系矩陣:X

2、攝像機坐標系:Xc,

3、圖像(像素)坐標系:x

4、相機矩陣:P

2.像平面到像素平面的投影

將三維空間中一點,過該點取一平面與像素平面平行,該平面就是像平面。設該三位點P,齊次坐標為X。投影為圖像點P’,平面坐標x。
針孔相機模型:

在針孔相機模型中,像素坐標和像坐標之間的關系:
λx = PX
其中,λ是三位點的逆深度。P為相機矩陣,可以分解為:
P = R[K|t]
R 是描述照相機方向的旋轉矩陣,t 是描述照相機中心位置的三維平移向量,內標定矩陣K 描述照相機的投影性質。標定矩陣僅和照相機自身的情況有關,通常可以寫成:

焦距f是像在平面到像素平面中心的距離。s是傾斜參數(shù),α是縱橫比例參數(shù)。
在像素數(shù)組在傳感器上沒有偏斜且像素是正方形的時候,可以設 s = 0,α = 1。標定矩陣可以簡化為:

三、相機標定

實驗圖片如下:

代碼如下:

import cv2
import numpy as np
import glob

# 找棋盤格角點
# 閾值
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
#棋盤格模板規(guī)格
w = 7 ? #內角點個數(shù),內角點是和其他格子連著的點
h = 7

# 世界坐標系中的棋盤格點,例如(0,0,0), (1,0,0), (2,0,0) ....,(8,5,0),去掉Z坐標,記為二維矩陣
objp = np.zeros((w*h,3), np.float32)
objp[:,:2] = np.mgrid[0:w,0:h].T.reshape(-1,2)
# 儲存棋盤格角點的世界坐標和圖像坐標對
objpoints = [] # 在世界坐標系中的三維點
imgpoints = [] # 在圖像平面的二維點

images = glob.glob('picture/*.jpg')
for fname in images:
? ? img = cv2.imread(fname)
? ? gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
? ? # 找到棋盤格角點
? ? # 棋盤圖像(8位灰度或彩色圖像) ?棋盤尺寸 ?存放角點的位置
? ? ret, corners = cv2.findChessboardCorners(gray, (w,h),None)
? ? # 如果找到足夠點對,將其存儲起來
? ? if ret == True:
? ? ? ? # 角點精確檢測
? ? ? ? # 輸入圖像 角點初始坐標 搜索窗口為2*winsize+1 死區(qū) 求角點的迭代終止條件
? ? ? ? cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
? ? ? ? objpoints.append(objp)
? ? ? ? imgpoints.append(corners)
? ? ? ? # 將角點在圖像上顯示
? ? ? ? cv2.drawChessboardCorners(img, (w,h), corners, ret)
? ? ? ? cv2.imshow('findCorners',img)
? ? ? ? cv2.waitKey(1000)
cv2.destroyAllWindows()
#標定、去畸變
# 輸入:世界坐標系里的位置 像素坐標 圖像的像素尺寸大小 3*3矩陣,相機內參數(shù)矩陣 畸變矩陣
# 輸出:標定結果 相機的內參數(shù)矩陣 畸變系數(shù) 旋轉矩陣 平移向量
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
# mtx:內參數(shù)矩陣
# dist:畸變系數(shù)
# rvecs:旋轉向量 (外參數(shù))
# tvecs :平移向量 (外參數(shù))
print (("ret:"),ret)
print (("mtx:\n"),mtx) ? ? ? ?# 內參數(shù)矩陣
print (("dist:\n"),dist) ? ? ?# 畸變系數(shù) ? distortion cofficients = (k_1,k_2,p_1,p_2,k_3)
print (("rvecs:\n"),rvecs) ? ?# 旋轉向量 ?# 外參數(shù)
print (("tvecs:\n"),tvecs) ? ?# 平移向量 ?# 外參數(shù)
# 去畸變
img2 = cv2.imread('picture/6.jpg')
h,w = img2.shape[:2]
# 我們已經得到了相機內參和畸變系數(shù),在將圖像去畸變之前,
# 我們還可以使用cv.getOptimalNewCameraMatrix()優(yōu)化內參數(shù)和畸變系數(shù),
# 通過設定自由自由比例因子alpha。當alpha設為0的時候,
# 將會返回一個剪裁過的將去畸變后不想要的像素去掉的內參數(shù)和畸變系數(shù);
# 當alpha設為1的時候,將會返回一個包含額外黑色像素點的內參數(shù)和畸變系數(shù),并返回一個ROI用于將其剪裁掉
newcameramtx, roi=cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),0,(w,h)) # 自由比例參數(shù)

dst = cv2.undistort(img2, mtx, dist, None, newcameramtx)
# 根據(jù)前面ROI區(qū)域裁剪圖片
x,y,w,h = roi
dst = dst[y:y+h, x:x+w]
cv2.imwrite('calibresult.jpg',dst)

# 反投影誤差
# 通過反投影誤差,我們可以來評估結果的好壞。越接近0,說明結果越理想。
# 通過之前計算的內參數(shù)矩陣、畸變系數(shù)、旋轉矩陣和平移向量,使用cv2.projectPoints()計算三維點到二維圖像的投影,
# 然后計算反投影得到的點與圖像上檢測到的點的誤差,最后計算一個對于所有標定圖像的平均誤差,這個值就是反投影誤差。
total_error = 0
for i in range(len(objpoints)):
? ? imgpoints2, _ = cv2.projectPoints(objpoints[i], rvecs[i], tvecs[i], mtx, dist)
? ? error = cv2.norm(imgpoints[i],imgpoints2, cv2.NORM_L2)/len(imgpoints2)
? ? total_error += error
print (("total error: "), total_error/len(objpoints))

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python自動分箱,計算woe,iv的實例代碼

    python自動分箱,計算woe,iv的實例代碼

    今天小編就為大家分享一篇python自動分箱,計算woe,iv的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 詳解Python?Requests庫中的重試策略

    詳解Python?Requests庫中的重試策略

    在Python中,requests庫是處理HTTP請求的標準工具之一,這篇文章主要為大家介紹了如何在requests中實現(xiàn)請求的自動重試,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11
  • python中數(shù)組和矩陣乘法及使用總結(推薦)

    python中數(shù)組和矩陣乘法及使用總結(推薦)

    這篇文章主要介紹了python中數(shù)組和矩陣乘法及使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • tensorflow模型保存、加載之變量重命名實例

    tensorflow模型保存、加載之變量重命名實例

    今天小編就為大家分享一篇tensorflow模型保存、加載之變量重命名實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 解決python繪圖使用subplots出現(xiàn)標題重疊的問題

    解決python繪圖使用subplots出現(xiàn)標題重疊的問題

    這篇文章主要介紹了python繪圖使用subplots出現(xiàn)標題重疊的問題及解決方法,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • python包相關知識點之包的導入、相對路徑以及絕對路徑

    python包相關知識點之包的導入、相對路徑以及絕對路徑

    Python的好處在于你不需要懂很多概念,你就有機會投入工作,同樣問題也有機會隨時發(fā)生,下面這篇文章主要給大家介紹了關于python包相關知識點之包的導入、相對路徑以及絕對路徑的相關資料,需要的朋友可以參考下
    2022-04-04
  • Python中rapidjson參數(shù)校驗實現(xiàn)

    Python中rapidjson參數(shù)校驗實現(xiàn)

    通常需要對前端傳遞過來的參數(shù)進行校驗,校驗的方式有多種,本文主要介紹了Python中rapidjson參數(shù)校驗實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 如何用Python來理一理紅樓夢里的那些關系

    如何用Python來理一理紅樓夢里的那些關系

    這篇文章主要介紹了用Python來理一理紅樓夢里的那些關系代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python安裝及建立虛擬環(huán)境的完整步驟

    Python安裝及建立虛擬環(huán)境的完整步驟

    在使用 Python 開發(fā)時,建議在開發(fā)環(huán)境和生產環(huán)境下都使用虛擬環(huán)境來管理項目的依賴,下面這篇文章主要給大家介紹了關于Python安裝及建立虛擬環(huán)境的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • python實現(xiàn)詞法分析器

    python實現(xiàn)詞法分析器

    這篇文章主要為大家詳細介紹了python實現(xiàn)詞法分析器的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論