国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

opencv進(jìn)行雙目標(biāo)定以及極線校正 python代碼

這篇具有很好參考價(jià)值的文章主要介紹了opencv進(jìn)行雙目標(biāo)定以及極線校正 python代碼。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

雙目標(biāo)定

參考博客 OpenCV相機(jī)標(biāo)定全過程
[OpenCV實(shí)戰(zhàn)]38 基于OpenCV的相機(jī)標(biāo)定
opencv立體標(biāo)定函數(shù) stereoCalibrate()

主要使用的函數(shù)

findChessboardCorners() #棋盤格角點(diǎn)檢測
cornerSubPix() #亞像素檢測
calibrateCamera() #單目標(biāo)定 求解攝像機(jī)的內(nèi)在參數(shù)和外在參數(shù)
stereoCalibrate() #雙目標(biāo)定 求解兩個(gè)攝像頭的內(nèi)外參數(shù)矩陣,以及兩個(gè)攝像頭的位置關(guān)系R,T

代碼

import cv2
import os
import numpy as np

leftpath = 'images/left'
rightpath = 'images/right'
CHECKERBOARD = (11,12)  #棋盤格內(nèi)角點(diǎn)數(shù)
square_size = (30,30)   #棋盤格大小,單位mm
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
imgpoints_l = []    #存放左圖像坐標(biāo)系下角點(diǎn)位置
imgpoints_r = []    #存放左圖像坐標(biāo)系下角點(diǎn)位置
objpoints = []   #存放世界坐標(biāo)系下角點(diǎn)位置
objp = np.zeros((1, CHECKERBOARD[0]*CHECKERBOARD[1], 3), np.float32)
objp[0,:,:2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)
objp[0,:,0] *= square_size[0]
objp[0,:,1] *= square_size[1]


for ii in os.listdir(leftpath):
    img_l = cv2.imread(os.path.join(leftpath,ii))
    gray_l = cv2.cvtColor(img_l,cv2.COLOR_BGR2GRAY)
    img_r = cv2.imread(os.path.join(rightpath,ii))
    gray_r = cv2.cvtColor(img_r,cv2.COLOR_BGR2GRAY)
    ret_l, corners_l = cv2.findChessboardCorners(gray_l, CHECKERBOARD)   #檢測棋盤格內(nèi)角點(diǎn)
    ret_r, corners_r = cv2.findChessboardCorners(gray_r, CHECKERBOARD)
    if ret_l and ret_r:
        objpoints.append(objp)
        corners2_l = cv2.cornerSubPix(gray_l,corners_l,(11,11),(-1,-1),criteria) 
        imgpoints_l.append(corners2_l)
        corners2_r = cv2.cornerSubPix(gray_r,corners_r,(11,11),(-1,-1),criteria)
        imgpoints_r.append(corners2_r)
        #img = cv2.drawChessboardCorners(img, CHECKERBOARD, corners2,ret)
        #cv2.imwrite('./ChessboardCornersimg.jpg', img)
ret, mtx_l, dist_l, rvecs_l, tvecs_l = cv2.calibrateCamera(objpoints, imgpoints_l, gray_l.shape[::-1],None,None)  #先分別做單目標(biāo)定
ret, mtx_r, dist_r, rvecs_r, tvecs_r = cv2.calibrateCamera(objpoints, imgpoints_r, gray_r.shape[::-1],None,None)

retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = \
    cv2.stereoCalibrate(objpoints, imgpoints_l, imgpoints_r, mtx_l, dist_l, mtx_r, dist_r, gray_l.shape[::-1])   #再做雙目標(biāo)定

print("stereoCalibrate : \n")
print("Camera matrix left : \n")
print(cameraMatrix1)
print("distCoeffs left  : \n")
print(distCoeffs1)
print("cameraMatrix left : \n")
print(cameraMatrix2)
print("distCoeffs left : \n")
print(distCoeffs2)
print("R : \n")
print(R)
print("T : \n")
print(T)
print("E : \n")
print(E)
print("F : \n")
print(F)

將打印的結(jié)果保存到標(biāo)定文件中即可

極線校正

參考博客 機(jī)器視覺學(xué)習(xí)筆記(8)——基于OpenCV的Bouguet立體校正
小白視角之Bouguet雙目立體校正原理

主要使用的函數(shù)

stereoRectify() #計(jì)算旋轉(zhuǎn)矩陣和投影矩陣
initUndistortRectifyMap() #計(jì)算校正查找映射表
remap() #重映射

代碼

import cv2
import numpy as np

def cat2images(limg, rimg):
    HEIGHT = limg.shape[0]
    WIDTH = limg.shape[1]
    imgcat = np.zeros((HEIGHT, WIDTH*2+20,3))
    imgcat[:,:WIDTH,:] = limg
    imgcat[:,-WIDTH:,:] = rimg
    for i in range(int(HEIGHT / 32)):
        imgcat[i*32,:,:] = 255 
    return imgcat

left_image = cv2.imread("images/left/268.jpg")
right_image = cv2.imread("images/right/268.jpg")

imgcat_source = cat2images(left_image,right_image)
HEIGHT = left_image.shape[0]
WIDTH = left_image.shape[1]
cv2.imwrite('imgcat_source.jpg', imgcat_source )

camera_matrix0 = np.array([[1.30991855e+03, 0.00000000e+00, 5.90463086e+02],
                            [0.00000000e+00, 1.31136722e+03, 3.33464608e+02],
                            [0.00000000e+00, 0.00000000e+00, 1.00000000e+00]]
                        ) .reshape((3,3)) #即上文標(biāo)定得到的 cameraMatrix1
                        
distortion0 = np.array([-4.88890701e-01,  3.27964225e-01, -2.72130825e-04,  1.28030208e-03, -1.85964828e-01]) #即上文標(biāo)定得到的 distCoeffs1

camera_matrix1 = np.array([[1.30057467e+03, 0.00000000e+00, 6.28445749e+02],
                            [0.00000000e+00, 1.30026325e+03, 3.90475091e+02],
                            [0.00000000e+00, 0.00000000e+00, 1.00000000e+00]]
                        ) .reshape((3,3)) #即上文標(biāo)定得到的 cameraMatrix2
distortion1 = np.array([-4.95938411e-01,  2.70207629e-01,  1.81014753e-04, -4.58891345e-04, 4.41327829e-01]) #即上文標(biāo)定得到的 distCoeffs2

R = np.array([[ 0.99989348,  0.01340678, -0.00576869], 
              [-0.01338004,  0.99989967,  0.00465071], 
              [ 0.00583046, -0.00457303,  0.99997255]]
            ) #即上文標(biāo)定得到的 R
T = np.array([-244.28272039, 3.84124178, 2.0963191]) #即上文標(biāo)定得到的T


(R_l, R_r, P_l, P_r, Q, validPixROI1, validPixROI2) = \
    cv2.stereoRectify(camera_matrix0, distortion0, camera_matrix1, distortion1, np.array([WIDTH,HEIGHT]), R, T) #計(jì)算旋轉(zhuǎn)矩陣和投影矩陣

(map1, map2) = \
    cv2.initUndistortRectifyMap(camera_matrix0, distortion0, R_l, P_l, np.array([WIDTH,HEIGHT]), cv2.CV_32FC1) #計(jì)算校正查找映射表

rect_left_image = cv2.remap(left_image, map1, map2, cv2.INTER_CUBIC) #重映射

#左右圖需要分別計(jì)算校正查找映射表以及重映射
(map1, map2) = \
    cv2.initUndistortRectifyMap(camera_matrix1, distortion1, R_r, P_r, np.array([WIDTH,HEIGHT]), cv2.CV_32FC1)
    
rect_right_image = cv2.remap(right_image, map1, map2, cv2.INTER_CUBIC)

imgcat_out = cat2images(rect_left_image,rect_right_image)
cv2.imwrite('imgcat_out.jpg', imgcat_out)

效果圖

校正前
左圖
opencv進(jìn)行雙目標(biāo)定以及極線校正 python代碼
右圖
opencv進(jìn)行雙目標(biāo)定以及極線校正 python代碼

opencv進(jìn)行雙目標(biāo)定以及極線校正 python代碼
校正后
opencv進(jìn)行雙目標(biāo)定以及極線校正 python代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-508548.html

到了這里,關(guān)于opencv進(jìn)行雙目標(biāo)定以及極線校正 python代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 雙目相機(jī)標(biāo)定及高精度測量方法,含c++和python代碼說明

    視覺測量定位中,雙面相機(jī)高精度標(biāo)定是一個(gè)重要的步驟。下面是關(guān)于如何進(jìn)行雙面相機(jī)高精度標(biāo)定的說明和C++和Python代碼實(shí)現(xiàn)。 1. 雙面相機(jī)高精度標(biāo)定的原理 雙面相機(jī)高精度標(biāo)定的目的是確定相機(jī)內(nèi)部參數(shù)和外部參數(shù)。其中,內(nèi)部參數(shù)包括焦距、主點(diǎn)和畸變系數(shù)等,外部

    2023年04月08日
    瀏覽(23)
  • python利用opencv進(jìn)行相機(jī)標(biāo)定獲取參數(shù),并根據(jù)畸變參數(shù)修正圖像附有全部代碼(流暢無痛版)

    python利用opencv進(jìn)行相機(jī)標(biāo)定獲取參數(shù),并根據(jù)畸變參數(shù)修正圖像附有全部代碼(流暢無痛版)

    今天的低價(jià)單孔攝像機(jī)(照相機(jī))會給圖像帶來很多畸變?;冎饕袃?種:徑向畸變和切想畸變。如下圖所示,用紅色直線將棋盤的兩個(gè)邊標(biāo)注出來, 但是你會發(fā)現(xiàn)棋盤的邊界并不和紅線重合。所有我們認(rèn)為應(yīng)該是直線的也都凸 出來了。 在 3D 相關(guān)應(yīng)用中,必須要先校正這些畸變

    2024年02月06日
    瀏覽(27)
  • 用OpenCV進(jìn)行相機(jī)標(biāo)定(張正友標(biāo)定,有代碼)

    用OpenCV進(jìn)行相機(jī)標(biāo)定(張正友標(biāo)定,有代碼)

    理論部分可以參考其他博客或者視覺slam十四講 相機(jī)標(biāo)定主要是為了獲得相機(jī)的內(nèi)參矩陣K和畸變參數(shù) 內(nèi)參矩陣K 畸變系數(shù):徑向畸變(k1,k2,k3), 切向畸變(p1,p2) 徑向畸變公式 切向畸變公式 張正友標(biāo)定方法能夠提供一個(gè)比較好的初始解,用于后序的最優(yōu)化. 這里用棋盤格進(jìn)行標(biāo)定,如

    2024年02月07日
    瀏覽(29)
  • kalibr 進(jìn)行相機(jī)單目、雙目標(biāo)定全流程

    kalibr 進(jìn)行相機(jī)單目、雙目標(biāo)定全流程

    參考鏈接: Installation · ethz-asl/kalibr Wiki · GitHub Docker 操作知識: Docker攻略:從安裝到入門到進(jìn)階 | Dockerfile調(diào)優(yōu) | 鏡像分層 | 容器生命周期/5種網(wǎng)絡(luò)模式 |跨宿主機(jī)通信_血煞長虹的博客-CSDN博客 部署kalibr步驟如下: 1.拉取鏡像 2.創(chuàng)建container 3.進(jìn)入container 運(yùn)行以后即可進(jìn)入con

    2024年02月09日
    瀏覽(35)
  • 使用opencv做雙目測距(相機(jī)標(biāo)定+立體匹配+測距)

    使用opencv做雙目測距(相機(jī)標(biāo)定+立體匹配+測距)

    最近在做雙目測距,覺得有必要記錄點(diǎn)東西,所以我的第一篇博客就這么誕生啦~ 雙目測距屬于立體視覺這一塊,我覺得應(yīng)該有很多人踩過這個(gè)坑了,但網(wǎng)上的資料依舊是云里霧里的,要么是理論講一大堆,最后發(fā)現(xiàn)還不知道怎么做,要么就是直接代碼一貼,讓你懵逼。 所以

    2024年01月20日
    瀏覽(22)
  • OpenCV快速入門:相機(jī)標(biāo)定——單目視覺和雙目視覺

    OpenCV快速入門:相機(jī)標(biāo)定——單目視覺和雙目視覺

    在當(dāng)今科技日益發(fā)展的時(shí)代,計(jì)算機(jī)視覺作為人工智能的重要分支,已經(jīng)深入到我們生活的各個(gè)領(lǐng)域。在這個(gè)廣闊的領(lǐng)域中,相機(jī)標(biāo)定是一個(gè)基礎(chǔ)且關(guān)鍵的步驟,它直接影響到視覺系統(tǒng)的精度和效能。尤其是在單目視覺和雙目視覺的應(yīng)用中,準(zhǔn)確的相機(jī)標(biāo)定成為了實(shí)現(xiàn)高效和

    2024年02月05日
    瀏覽(39)
  • 使用python-opencv對雙目攝像頭進(jìn)行立體視覺圖像矯正,去畸變

    使用python-opencv對雙目攝像頭進(jìn)行立體視覺圖像矯正,去畸變

    ? ? ? ? 1、一張棋盤圖 ????????可以直接從opencv官方github下載,這是一個(gè)擁有10*7個(gè)格子的棋盤,共有 9*6個(gè)角點(diǎn),每個(gè)格子24mm ,本文所使用的就是這一個(gè)棋盤。你需要將它打印在A4紙上用于后續(xù)使用。(也可以根據(jù)官方教程自行設(shè)置棋盤大小OpenCV: Create calibration pattern)

    2024年02月10日
    瀏覽(26)
  • OpenCV基礎(chǔ)(28)使用OpenCV進(jìn)行攝像機(jī)標(biāo)定Python和C++

    OpenCV基礎(chǔ)(28)使用OpenCV進(jìn)行攝像機(jī)標(biāo)定Python和C++

    攝像頭是機(jī)器人、監(jiān)控、太空探索、社交媒體、工業(yè)自動化甚至娛樂業(yè)等多個(gè)領(lǐng)域不可或缺的一部分。 對于許多應(yīng)用,必須了解相機(jī)的參數(shù)才能有效地將其用作視覺傳感器。 在這篇文章中,您將了解相機(jī)校準(zhǔn)所涉及的步驟及其意義。 我們還共享 C++ 和 Python 代碼以及棋盤圖案

    2024年02月04日
    瀏覽(18)
  • 使用ROS功能包c(diǎn)amera_calibration進(jìn)行單目相機(jī)和雙目相機(jī)的內(nèi)參和外參標(biāo)定

    使用ROS功能包c(diǎn)amera_calibration進(jìn)行單目相機(jī)和雙目相機(jī)的內(nèi)參和外參標(biāo)定

    本文總結(jié)使用ROS標(biāo)定單目和雙目相機(jī)的過程,同時(shí)提供生成棋盤格文件的方法。 參考鏈接: [1]使用ros標(biāo)定相機(jī)的內(nèi)參和外參 [2]ROS下采用camera_calibration進(jìn)行雙目相機(jī)標(biāo)定 棋盤格可以自己買一個(gè),或者打印一個(gè)粘在板子上,棋盤格電子版生成可以參考博客《使用kalibr標(biāo)定工具進(jìn)

    2024年02月11日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包