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

【計(jì)算機(jī)視覺】OpenCV實(shí)現(xiàn)單目相機(jī)標(biāo)定

這篇具有很好參考價(jià)值的文章主要介紹了【計(jì)算機(jī)視覺】OpenCV實(shí)現(xiàn)單目相機(jī)標(biāo)定。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

文章目錄

  • 單目相機(jī)標(biāo)定(基于Python OpenCV)
    • 1.上期填坑
    • 2.單目相機(jī)標(biāo)定
      • 2.1 數(shù)據(jù)采集
      • 2.2 角點(diǎn)提取
      • 2.3 參數(shù)求解
      • 2.4 參數(shù)評(píng)估(重投影誤差)
      • 2.5 相機(jī)位姿(棋盤位姿)可視化
      • 2.6 同Matlab標(biāo)定結(jié)果比較

單目相機(jī)標(biāo)定(基于Python OpenCV)

1.上期填坑

在開始本篇博客之前,先填一下上一篇博客【計(jì)算機(jī)視覺】基于ORB角點(diǎn)+RANSAC算法實(shí)現(xiàn)圖像全景拼接的坑(不算填吧,算做一個(gè)記錄,因?yàn)椴]有解決問題,留著看以后有沒有空解決??),不想看的可以直接跳到下一節(jié)。

首先解決如何拼接多張圖像(上篇博客只能拼接兩張圖像,多張圖像需要保存兩張圖像的匹配結(jié)果,再重新讀取計(jì)算角點(diǎn))

改進(jìn)的方法的基本思路是,僅計(jì)算當(dāng)前兩張圖像的單應(yīng)變換M_current,通過先前的單應(yīng)矩陣M_before再計(jì)算一個(gè)累積變換,最終通過矩陣乘法得到的M的變換就延續(xù)了當(dāng)前變換的累積變換矩陣:

    # 一開始無先前變換,因此設(shè)置為單位陣
    M_before = np.eye(3,3)
    result = cv2.imread('datas/1.jpg')
    # result = CalcUndistort(result, mtx, dist)
    result,_,_ = utils.auto_reshape(result, 1080)
    img2 = result
    cors2, desc2= extraORBfromImg(orb, img2)

    for i in range(1,6):
        print(i)
        img1 = cv2.imread('datas/'+str(i+1)+'.jpg')
        # img1 = CalcUndistort(img1, mtx, dist)
        img1,_,_ = utils.auto_reshape(img1, 1080)
        cors1, desc1= extraORBfromImg(orb, img1)
        
        match_dist, match_idx = ORBMatch(match, desc1, desc2)
        # 得到匹配點(diǎn)對(duì)的坐標(biāo)
        match_pts = findMatchCord(match_idx, cors1, cors2)
        # 可視化匹配點(diǎn)
        # utils.drawMatches(img1, img2, cors1, cors2, match_idx)
        # RANSAC迭代去除異常點(diǎn)對(duì)
        update_match_pts = RANSAC(match_pts)
        # 最小二乘方法計(jì)算單應(yīng)矩陣
        M = calc_homography(update_match_pts)
        # 圖像拼接結(jié)果可視化, 并傳遞累積單應(yīng)變換矩陣M ,返回先前累積拼接結(jié)果result
        result, M = homography_trans(M, M_before, img1, result)
        M_before = M
        # 不用再提取一遍:
        img2 = img1
        cors2, desc2 = cors1, desc1

值得注意的是,代碼采用的匹配順序是從右至左,為了保證每次只提取最左側(cè)圖像的角點(diǎn),img1對(duì)于圖像的拍攝時(shí)序應(yīng)該要在img2的左側(cè)。

相應(yīng)的,函數(shù)homography_trans也要做修改:

# 可視化圖像對(duì)映射效果
def homography_trans(M, M_before, img1, img2):
    M = M_before @ M
    # out_img 第一張圖像映射到第二張
    x_min, x_max, y_min, y_max, M2 = calc_border(M, img1.shape)
    # 透視變換+平移變換(使得圖像在正中央)
    M = M2 @ M
    w, h = int(round(x_max)-round(x_min)), int(round(y_max)-round(y_min))
    out_img = cv2.warpPerspective(img1, M, (w, h))
    # print(out_img.shape)
    # cv2.imshow('ww',out_img)
    # cv2.waitKey(0)
    # 調(diào)整兩張圖像位姿一致:
    # x方向
    out_img_blank_x = np.zeros((out_img.shape[0], abs(round(x_min)), 3)).astype(np.uint8)
    img2_blank_x = np.zeros((img2.shape[0], abs(round(x_min)), 3)).astype(np.uint8)
    if(x_min>0):
        # print(1)
        out_img = cv2.hconcat((out_img_blank_x, out_img))
    if(x_min<0):
        # print(2)
        img2 = cv2.hconcat((img2_blank_x, img2))
    # y方向
    out_img_blank_y = np.zeros((abs(round(y_min)), out_img.shape[1], 3)).astype(np.uint8)
    img2_blank_y = np.zeros((abs(round(y_min)), img2.shape[1], 3)).astype(np.uint8)
    if(y_min>0):
        # print(3)
        out_img = cv2.vconcat((out_img, out_img_blank_y))
    if(y_min<0):
        # print(4)
        img2 = cv2.vconcat((img2_blank_y, img2))
    # 調(diào)整兩張圖像尺度一致(邊緣填充):
    if(img2.shape[0]<out_img.shape[0]):
        blank_y = np.zeros((out_img.shape[0]-img2.shape[0], img2.shape[1], 3)).astype(np.uint8)
        img2 = cv2.vconcat((img2, blank_y)) 
    else:
        blank_y = np.zeros((img2.shape[0]-out_img.shape[0], out_img.shape[1], 3)).astype(np.uint8)
        out_img = cv2.vconcat((out_img, blank_y)) 
    if(img2.shape[1]<out_img.shape[1]):
        blank_x = np.zeros((img2.shape[0], out_img.shape[1]-img2.shape[1], 3)).astype(np.uint8)
        img2 = cv2.hconcat((img2, blank_x)) 
    else:
        blank_x = np.zeros((out_img.shape[0], img2.shape[1]-out_img.shape[1], 3)).astype(np.uint8)
        out_img = cv2.hconcat((out_img, blank_x))        

    # cv2.imwrite('out_img.jpg',out_img)
    # 疊加
    result = addMatches(out_img, img2)

    # 圖像背景白
    mask = 255*np.ones(result.shape).astype(np.uint8)
    gray_res = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)
    mask[gray_res==0]=0
    cv2.imwrite('mask.jpg',mask)
    # result[result==0]=255
    cv2.imwrite('result.jpg',result)
    return result, M

重點(diǎn)是改了這里(實(shí)現(xiàn)單應(yīng)變換的傳遞):

... ...
M = M_before @ M
... ...
M = M2 @ M

(Ps:如果從左至右拼接,好像有點(diǎn)問題…)

然后另一個(gè)問題是:往后的拼接圖像計(jì)算出的單應(yīng)矩陣就會(huì)越扭曲:整一個(gè)視覺效果就會(huì)像文章來源地址http://www.zghlxwxcb.cn/news/detail-416825.html

到了這里,關(guān)于【計(jì)算機(jī)視覺】OpenCV實(shí)現(xiàn)單目相機(jī)標(biāo)定的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 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)
  • 【計(jì)算機(jī)視覺】基于OpenCV計(jì)算機(jī)視覺的攝像頭測(cè)距技術(shù)設(shè)計(jì)與實(shí)現(xiàn)

    【計(jì)算機(jī)視覺】基于OpenCV計(jì)算機(jī)視覺的攝像頭測(cè)距技術(shù)設(shè)計(jì)與實(shí)現(xiàn)

    在當(dāng)今技術(shù)日益進(jìn)步的時(shí)代,計(jì)算機(jī)視覺已成為我們生活中不可或缺的一部分。從智能監(jiān)控到虛擬現(xiàn)實(shí),計(jì)算機(jī)視覺技術(shù)的應(yīng)用范圍日益廣泛。在這篇博客中,我們將探索一個(gè)特別實(shí)用的計(jì)算機(jī)視覺案例:使用OpenCV實(shí)現(xiàn)攝像頭測(cè)距。這一技術(shù)不僅對(duì)專業(yè)人士有用,也為編程愛

    2024年02月04日
    瀏覽(26)
  • 白學(xué)立體視覺(3): 單目相機(jī)標(biāo)定

    白學(xué)立體視覺(3): 單目相機(jī)標(biāo)定

    小伙伴們,第一個(gè)理論加實(shí)踐的小結(jié)來啦。本小節(jié)將會(huì)在白學(xué)立體視覺(2): 相機(jī)內(nèi)外參數(shù)與坐標(biāo)系的基礎(chǔ)上,介紹一下鼎鼎有名的張正友標(biāo)定法。 我們?nèi)绻胫亟ǔ鲆慌_(tái)相機(jī)的成像過程的數(shù)學(xué)模型,相機(jī)的參數(shù)是最基本的。相機(jī)參數(shù)又分為內(nèi)參和外參。那么內(nèi)參和外參就是

    2024年02月06日
    瀏覽(17)
  • 【計(jì)算機(jī)視覺】---OpenCV實(shí)現(xiàn)物體追蹤

    OpenCV中的物體追蹤算法基于視覺目標(biāo)跟蹤的原理。物體追蹤的目標(biāo)是在連續(xù)的圖像序列中定位和跟蹤特定物體的位置。 在物體追蹤中,我們需要對(duì)目標(biāo)對(duì)象進(jìn)行表示。通常使用邊界框(bounding box)來表示目標(biāo)的位置和大小。邊界框是一個(gè)矩形區(qū)域,由左上角的坐標(biāo)(x,y)和

    2024年02月08日
    瀏覽(22)
  • 計(jì)算機(jī)視覺實(shí)戰(zhàn)項(xiàng)目2(單目測(cè)距+圖像處理+路徑規(guī)劃+車牌識(shí)別)

    計(jì)算機(jī)視覺實(shí)戰(zhàn)項(xiàng)目2(單目測(cè)距+圖像處理+路徑規(guī)劃+車牌識(shí)別)

    用python3+opencv3做的中國車牌識(shí)別,包括算法和客戶端界面,只有2個(gè)文件,一個(gè)是界面代碼,一個(gè)是算法代碼,點(diǎn)擊即可出結(jié)果,方便易用! 鏈接:車牌識(shí)別 大致的UI界面如下,點(diǎn)擊輸入圖片,右側(cè)即可出現(xiàn)結(jié)果! 額外說明:算法代碼只有500行,測(cè)試中發(fā)現(xiàn),車牌定位算法的

    2024年02月07日
    瀏覽(15)
  • 計(jì)算機(jī)視覺:使用opencv實(shí)現(xiàn)車牌識(shí)別

    計(jì)算機(jī)視覺:使用opencv實(shí)現(xiàn)車牌識(shí)別

    汽車車牌識(shí)別(License Plate Recognition)是一個(gè)日常生活中的普遍應(yīng)用,特別是在智能交通系統(tǒng)中,汽車牌照識(shí)別發(fā)揮了巨大的作用。汽車牌照的自動(dòng)識(shí)別技術(shù)是把處理圖像的方法與計(jì)算機(jī)的軟件技術(shù)相連接在一起,以準(zhǔn)確識(shí)別出車牌牌照的字符為目的,將識(shí)別出的數(shù)據(jù)傳送至交

    2024年02月04日
    瀏覽(26)
  • 計(jì)算機(jī)視覺:使用opencv實(shí)現(xiàn)銀行卡號(hào)識(shí)別

    計(jì)算機(jī)視覺:使用opencv實(shí)現(xiàn)銀行卡號(hào)識(shí)別

    OpenCV是Open Source Computer Vision Library(開源計(jì)算機(jī)視覺庫)的簡(jiǎn)稱,由Intel公司在1999年提出建立,現(xiàn)在由Willow Garage提供運(yùn)行支持,它是一個(gè)高度開源發(fā)行的計(jì)算機(jī)視覺庫,可以實(shí)現(xiàn)Windows、Linux、Mac等多平臺(tái)的跨平臺(tái)操作。opencv是一個(gè)用于圖像處理、分析、機(jī)器視覺方面的開源函

    2024年02月05日
    瀏覽(24)
  • 計(jì)算機(jī)視覺之三維重建(二)(攝像機(jī)標(biāo)定)

    計(jì)算機(jī)視覺之三維重建(二)(攝像機(jī)標(biāo)定)

    標(biāo)定示意圖 標(biāo)定目標(biāo) P ′ = M P w = K [ R ? T ] P w P^{\\\'}=MP_w=K[R space T]P_w P ′ = M P w ? = K [ R ? T ] P w ? 其中 K K K 為內(nèi)參數(shù), [ R ? T ] [R space T] [ R ? T ] 為外參數(shù)。該式子需要使用至少六對(duì)內(nèi)外點(diǎn)對(duì)進(jìn)行求解內(nèi)外參數(shù)(11個(gè)未知參數(shù))。 其中 R 3 × 3 , T 3 × 1 R_{3 times 3}, T_{3 times

    2024年02月12日
    瀏覽(28)
  • 【計(jì)算機(jī)視覺·OpenCV】使用Haar+Cascade實(shí)現(xiàn)人臉檢測(cè)

    【計(jì)算機(jī)視覺·OpenCV】使用Haar+Cascade實(shí)現(xiàn)人臉檢測(cè)

    人臉檢測(cè)的目標(biāo)是找出圖像中所有的人臉對(duì)應(yīng)的位置,算法的輸出是人臉的外接矩形在圖像中的坐標(biāo)。使用 haar 特征和 cascade 檢測(cè)器進(jìn)行人臉檢測(cè)是一種傳統(tǒng)的方式,下面將給出利用 OpenCV 中的 haarcascade 進(jìn)行人臉檢測(cè)的代碼。 可選的人臉檢測(cè)模型(區(qū)別是檢測(cè)速度和精度不同

    2023年04月12日
    瀏覽(34)
  • 【計(jì)算機(jī)視覺】相機(jī)

    【計(jì)算機(jī)視覺】相機(jī)

    我的《計(jì)算機(jī)視覺》系列參考UC Berkeley的CS180課程,PPT可以在課程主頁看到。 成像原理 想要拍一張相片,直接拿膠片對(duì)著景物肯定是不行的,因?yàn)槲矬w的每一點(diǎn)發(fā)出的光線都會(huì)到達(dá)膠片上的每一點(diǎn),從而導(dǎo)致膠片上的影像非常模糊,甚至什么都看不出來。因此,我們想建立景

    2024年02月08日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包