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

OpenCV實(shí)現(xiàn)相機(jī)校正

 更新時(shí)間:2021年05月17日 17:05:46   作者:ʚVVcatɞ  
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)相機(jī)校正,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了OpenCV實(shí)現(xiàn)相機(jī)校正的具體代碼,供大家參考,具體內(nèi)容如下

1. 相機(jī)標(biāo)定

根據(jù)張正友校正算法,利用棋盤格數(shù)據(jù)校正對(duì)車載相機(jī)進(jìn)行校正,計(jì)算其內(nèi)參矩陣,外參矩陣和畸變系數(shù)。

標(biāo)定的流程是:

  • 準(zhǔn)備棋盤格數(shù)據(jù),即用于標(biāo)定的圖片
  • 對(duì)每一張圖片提取角點(diǎn)信息
  • 在棋盤上繪制提取到的角點(diǎn)(非必須,只是為了顯示結(jié)果)
  • 利用提取的角點(diǎn)對(duì)相機(jī)進(jìn)行標(biāo)定
  • 獲取相機(jī)的參數(shù)信息

2.關(guān)于相機(jī)校正用到的幾個(gè)API:

1、尋找棋盤圖中的棋盤角點(diǎn)

rect, corners = cv2.findChessboardCorners(image, pattern_size, flags)

參數(shù):

  • Image: 輸入的棋盤圖,必須是8位的灰度或者彩色圖像
  • Pattern_size:棋盤圖中每行每列的角點(diǎn)個(gè)數(shù)(內(nèi)角點(diǎn))。
  • flags: 用來(lái)定義額外的濾波步驟以有助于尋找棋盤角點(diǎn)。所有的變量都可以單獨(dú)或者以邏輯或的方式組合使用。取值主要有:

      CV_CALIB_CB_ADAPTIVE_THRESH :使用自適應(yīng)閾值(通過(guò)平均圖像亮度計(jì)算得到)將圖像轉(zhuǎn)換為黑白圖,而不是一個(gè)固定的閾值。

        CV_CALIB_CB_NORMALIZE_IMAGE :在利用固定閾值或者自適應(yīng)的閾值進(jìn)行二值化之前,先使用cvNormalizeHist來(lái)均衡化圖像亮度。

        CV_CALIB_CB_FILTER_QUADS :使用其他的準(zhǔn)則(如輪廓面積,周長(zhǎng),方形形狀)來(lái)去除在輪廓檢測(cè)階段檢測(cè)到的錯(cuò)誤方塊。

返回:

  • Corners:檢測(cè)到的角點(diǎn)
  • rect: 輸出是否找到角點(diǎn),找到角點(diǎn)返回1,否則返回0

2、檢測(cè)完角點(diǎn)之后可以將測(cè)到的角點(diǎn)繪制在圖像上,使用的API是:

cv2.drawChessboardCorners(img, pattern_size, corners, rect)

參數(shù):

  • Img: 預(yù)繪制檢測(cè)角點(diǎn)的圖像
  • pattern_size : 預(yù)繪制的角點(diǎn)的形狀
  • corners: 角點(diǎn)矩陣
  • rect: 表示是否所有的棋盤角點(diǎn)被找到,可以設(shè)置為findChessboardCorners的返回值

注意:如果發(fā)現(xiàn)了所有的角點(diǎn),那么角點(diǎn)將用不同顏色繪制(每行使用單獨(dú)的顏色繪制),并且把角點(diǎn)以一定順序用線連接起來(lái)。

3利用定標(biāo)的結(jié)果計(jì)算內(nèi)外參數(shù)

ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(object_points, image_points, image_size, None, None)

參數(shù):

  • Object_points:世界坐標(biāo)系中的點(diǎn),在使用棋盤的場(chǎng)合,令z的坐標(biāo)值為0,而x,y坐標(biāo)用里面來(lái)度量,選用英寸單位,那么所有參數(shù)計(jì)算的結(jié)果也是用英寸表示。最簡(jiǎn)單的方式是定義棋盤的每一個(gè)方塊為一個(gè)單位。
  • image_points:在圖像中尋找到的角點(diǎn)的坐標(biāo),包含object_points所提供的所有點(diǎn)
  • image_size: 圖像的大小,以像素為衡量單位

返回:

  • ret: 返回值
  • mtx: 相機(jī)的內(nèi)參矩陣,大小為3*3的矩陣
  • dist: 畸變系數(shù),為5*1大小的矢量
  • rvecs: 旋轉(zhuǎn)變量
  • tvecs: 平移變量

2.1 圖像去畸變

上一步中得到相機(jī)的內(nèi)參及畸變系數(shù),利用其進(jìn)行圖像的去畸變,最直接的方法就是調(diào)用opencv中的函數(shù)得到去畸變的圖像:

def img_undistort(img, mtx, dist):
    dst = cv2.undistort(img, mtx, dist, None, mtx)
    return dst

求畸變的API:

dst = cv2.undistort(img, mtx, dist, None, mtx)

參數(shù):

  • Img: 要進(jìn)行校正的圖像
  • mtx: 相機(jī)的內(nèi)參
  • dist: 相機(jī)的畸變系數(shù)

返回:

  • dst: 圖像校正后的結(jié)果

3. 相機(jī)校正

import cv2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import glob

def plot_contrast_imgs(origin_img, converted_img, origin_img_title="origin_img", converted_img_title="converted_img", converted_img_gray=False):
    """
    用于對(duì)比顯示兩幅圖像
    """
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 20))
    ax1.set_title(origin_img_title)
    ax1.imshow(origin_img)
    ax2.set_title(converted_img_title)
    if converted_img_gray==True:
        ax2.imshow(converted_img, cmap="gray")
    else:
        ax2.imshow(converted_img)
    plt.show()

# 1. 參數(shù)設(shè)定:定義棋盤橫向和縱向的角點(diǎn)個(gè)數(shù)并指定校正圖像的位置
nx = 9
ny = 6
file_paths = glob.glob("./camera_cal/calibration*.jpg")
# 2. 計(jì)算相機(jī)的內(nèi)外參數(shù)及畸變系數(shù)
def cal_calibrate_params(file_paths):
    object_points = []  # 三維空間中的點(diǎn):3D
    image_points = []   # 圖像空間中的點(diǎn):2d
    # 2.1 生成真實(shí)的交點(diǎn)坐標(biāo):類似(0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)的三維點(diǎn)
    objp = np.zeros((nx * ny, 3), np.float32)
    objp[:, :2] = np.mgrid[0:nx, 0:ny].T.reshape(-1, 2)
    # 2.2 檢測(cè)每幅圖像角點(diǎn)坐標(biāo)
    for file_path in file_paths:
        img = cv2.imread(file_path)
        # 將圖像轉(zhuǎn)換為灰度圖
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # 自動(dòng)檢測(cè)棋盤格內(nèi)4個(gè)棋盤格的角點(diǎn)(2白2黑的交點(diǎn))
        rect, corners = cv2.findChessboardCorners(gray, (nx, ny), None)
        # 若檢測(cè)到角點(diǎn),則將其存儲(chǔ)到object_points和image_points
        if rect == True:
            object_points.append(objp)
            image_points.append(corners)
    # 2.3 獲取相機(jī)參數(shù)
    ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(object_points, image_points, gray.shape[::-1], None, None)
    return ret, mtx, dist, rvecs, tvecs


def img_undistort(img, mtx, dist):
    """
    圖像去畸變
    """
    return cv2.undistort(img, mtx, dist, None, mtx)

# 測(cè)試去畸變函數(shù)的效果
file_paths = glob.glob("./camera_cal/calibration*.jpg")
ret, mtx, dist, rvecs, tvecs = cal_calibrate_params(file_paths)
if mtx.any() != None:  # a.any() or a.all()
    img = mpimg.imread("./camera_cal/calibration1.jpg")
    undistort_img = img_undistort(img, mtx, dist)
    plot_contrast_imgs(img, undistort_img)
    print("done!")
else:
    print("failed")

執(zhí)行代碼:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python處理數(shù)據(jù),存進(jìn)hive表的方法

    python處理數(shù)據(jù),存進(jìn)hive表的方法

    今天小編就為大家分享一篇python處理數(shù)據(jù),存進(jìn)hive表的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • keras實(shí)現(xiàn)VGG16 CIFAR10數(shù)據(jù)集方式

    keras實(shí)現(xiàn)VGG16 CIFAR10數(shù)據(jù)集方式

    這篇文章主要介紹了keras實(shí)現(xiàn)VGG16 CIFAR10數(shù)據(jù)集方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Python樹的平衡檢測(cè)算法實(shí)現(xiàn)

    Python樹的平衡檢測(cè)算法實(shí)現(xiàn)

    樹的平衡檢測(cè)是指判斷一棵樹是否為平衡二叉樹,即每個(gè)節(jié)點(diǎn)的左右子樹高度差不超過(guò)1,本文主要介紹了Python樹的平衡檢測(cè)算法實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • Python實(shí)現(xiàn)字典按key或者value進(jìn)行排序操作示例【sorted】

    Python實(shí)現(xiàn)字典按key或者value進(jìn)行排序操作示例【sorted】

    這篇文章主要介紹了Python實(shí)現(xiàn)字典按key或者value進(jìn)行排序操作,結(jié)合實(shí)例形式分析了Python針對(duì)字典按照key或者value進(jìn)行排序的相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)詳解

    Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 基于python實(shí)現(xiàn)cdn日志文件導(dǎo)入mysql進(jìn)行分析

    基于python實(shí)現(xiàn)cdn日志文件導(dǎo)入mysql進(jìn)行分析

    這篇文章主要介紹了基于python實(shí)現(xiàn)cdn日志文件導(dǎo)入mysql進(jìn)行分析,本文以阿里云CDN日志作為輔助查詢數(shù)據(jù)展開主題內(nèi)容,其它云平臺(tái)大同小異,需要的小伙伴可以參考一下
    2022-05-05
  • Pygame坦克大戰(zhàn)游戲開發(fā)實(shí)戰(zhàn)詳解代碼

    Pygame坦克大戰(zhàn)游戲開發(fā)實(shí)戰(zhàn)詳解代碼

    《坦克大戰(zhàn)》以二戰(zhàn)坦克為題材,既保留了射擊類游戲的操作性,也改進(jìn)了射擊類游戲太過(guò)于復(fù)雜難玩的高門檻特點(diǎn),集休閑與競(jìng)技于一身。經(jīng)典再度襲來(lái),流暢的畫面,瘋狂的戰(zhàn)斗,讓玩家再次進(jìn)入瘋狂坦克的世界。玩家的目標(biāo)是控制坦克躲避危險(xiǎn),消滅掉所有的敵人即可進(jìn)入下一關(guān)
    2022-02-02
  • pycharm中創(chuàng)建sql文件及模板的過(guò)程

    pycharm中創(chuàng)建sql文件及模板的過(guò)程

    很多小伙伴剛開始使用pycharm時(shí)發(fā)現(xiàn)以前的老員工在使用pycharm創(chuàng)建sql文件時(shí)會(huì)自帶文件頭模板,例如時(shí)間、作者、版本、郵件等信息,這是怎么做到的呢,一起來(lái)看一下吧
    2022-07-07
  • python微信跳一跳系列之棋子定位像素遍歷

    python微信跳一跳系列之棋子定位像素遍歷

    這篇文章主要為大家詳細(xì)介紹了python微信跳一跳系列之棋子定位之像素遍歷,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 詳解Django框架中的視圖級(jí)緩存

    詳解Django框架中的視圖級(jí)緩存

    這篇文章主要介紹了詳解Django框架中的視圖級(jí)緩存,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

瑞丽市| 峨山| 礼泉县| 郑州市| 三亚市| 巩留县| 疏勒县| 雷山县| 马龙县| 申扎县| 英德市| 平原县| 磴口县| 正宁县| 中江县| 荔波县| 长丰县| 西乌珠穆沁旗| 高阳县| 赤水市| 将乐县| 关岭| 澎湖县| 云阳县| 博兴县| 宝坻区| 田东县| 新巴尔虎左旗| 进贤县| 应用必备| 阳山县| 清流县| 西昌市| 长子县| 沅江市| 调兵山市| 苗栗县| 浦北县| 沿河| 寿光市| 尖扎县|