最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+OpenCV實現(xiàn)相機標定的方法詳解

 更新時間:2023年05月17日 11:32:18   作者:微小冷  
opencv中內(nèi)置了張正友的棋盤格標定法,通過一些姿態(tài)各異的棋盤格圖像,可以標定相機的內(nèi)外參數(shù),本文為大家介紹OpenCV進行相機標定的具體方法,希望對大家有所幫助

opencv中內(nèi)置了張正友的棋盤格標定法,通過一些姿態(tài)各異的棋盤格圖像,就能標定相機的內(nèi)外參數(shù)。

角點檢測

第一步是角點檢測,首先需要讀取棋盤格圖像

import numpy as np
import cv2
import os

path = 'imgs'   # 圖像文件夾;相對路徑
fs = os.listdir(path)
grays = []
for f in fs:
    fName = os.path.join(path, f)
    img = cv2.imread(fName)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 圖像轉(zhuǎn)灰度
    grays.append(gray)

其中,grays中便是所有棋盤格灰度圖像,接下來,就要找到這些棋盤格的角點位置,主要用到函數(shù)findChessboardCorners,其輸入?yún)?shù)為棋盤格圖像、角點個數(shù)以及標志位。

w, h = 11, 8        # 交點橫縱個數(shù)

# 亞像素點的檢測條件
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
pImgs = []
for g in grays: 
   # cs即位初步檢測的角點
   ret, cs = cv2.findChessboardCorners(g, (w, h), None) 
   # 亞像素角點檢測
   pImg = cv2.cornerSubPix(g, cs.astype(np.float32), (5, 5), (-1,   -1), criteria)
   pImgs.append(np.squeeze(pImg))

其中,pImg用于存放像素坐標中的二維點。

查看角點

為了驗證角點檢測是否合理,可以將其畫出來,用opencv自帶的工具就像下面這樣就可以,

cv2.drawChessboardCorners(grays[0], (w, h), pImgs[0], None)
cv2.imshow('findCorners', grays[0])
cv2.waitKey(1000)

但窗口縮放比較麻煩,所以更推薦用經(jīng)典的matplotlib來畫圖

import matplotlib.pyplot as plt
pts = pImgs[0].squeeze().reshape(-1,2).T
plt.imshow(grays[0])
plt.scatter(pts[0], pts[1], marker='*', c='red')
plt.show()

效果如下

標定

函數(shù)calibrateCamera可用于圖像標定,只需將現(xiàn)實世界的點和相機坐標系中的角點的一一對應(yīng)關(guān)系輸入,便能得到相應(yīng)的相機矩陣。其中,現(xiàn)實世界中哦的三維點,一般成為對象點,由于棋盤格中每個方塊都是等距的,故可直接建立為類似(1,0,0), (2,0,0)...即可

objp = np.zeros((6*7,3), np.float32)
objp[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2)

pObj = np.zeros((w*h, 3), np.float32)
pObj[:,:2] = np.mgrid[0:w, 0:h].T.reshape(-1,2)
pObjs = [pObj for _ in range(len(pImgs))]

至此,萬事俱備,只需調(diào)用

size = grays[0].shape[::-1]     # 圖像尺寸
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(pObjs, pImgs, size, None, None)

其中,rec為成功標志,為True時表示標定成功。

mtx為內(nèi)參矩陣,差不多是

dist為畸變參數(shù),最多有8個,分別表示k1,k2,p1,p2,k3,k4,k5,k6,本次標定得到的結(jié)果為

>>> print(dist)
[[-8.36577030e-02 -1.68977185e-01 -1.12233478e-03  9.45685802e-04
  -2.04246147e+01]]

這些畸變參數(shù)的物理意義如下

以上就是Python+OpenCV實現(xiàn)相機標定的方法詳解的詳細內(nèi)容,更多關(guān)于Python OpenCV相機標定的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

班玛县| 龙川县| 梨树县| 湖北省| 大安市| 青田县| 富顺县| 永福县| 云梦县| 钦州市| 德化县| 灯塔市| 康乐县| 伽师县| 新野县| 孟津县| 额济纳旗| 慈溪市| 嵊泗县| 富川| 永昌县| 南木林县| 礼泉县| 濮阳县| 正定县| 大英县| 平陆县| 呈贡县| 睢宁县| 谢通门县| 山东省| 牙克石市| 永川市| 南陵县| 北安市| 仁化县| 墨江| 海伦市| 临海市| 邹城市| 吴旗县|