91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用OpenCV實(shí)現(xiàn)目標(biāo)物體到相機(jī)的距離測(cè)量

jt_rfid5 ? 來源:今日光電 ? 作者:今日光電 ? 2022-11-29 14:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

攝像頭測(cè)距就是計(jì)算照片中的目標(biāo)物體到相機(jī)的距離??梢允褂孟嗨迫切危╰riangle similarity)方法實(shí)現(xiàn),或者使用更復(fù)雜但更準(zhǔn)確的相機(jī)模型的內(nèi)參來實(shí)現(xiàn)這個(gè)功能。

使用相似三角形計(jì)算物體到相機(jī)的距離

假設(shè)物體的寬度為 W,將其放到離相機(jī)距離為 D 的位置,然后對(duì)物體進(jìn)行拍照。在照片上量出物體的像素寬度 P,于是可以得出計(jì)算相機(jī)焦距 F 的公式:
b8e83df2-6f0c-11ed-8abf-dac502259ad0.svg

比如我在相機(jī)前 24 英寸距離(D=24 inches)的位置橫著放了一張 8.5 x 11 英寸(W=11 inches)的紙,拍照后通過圖像處理得出照片上紙的像素寬度 P=248 pixels。所以焦距 F 等于:

b8fb5fc2-6f0c-11ed-8abf-dac502259ad0.svg

此時(shí)移動(dòng)相機(jī)離物體更近或者更遠(yuǎn),我們可以應(yīng)用相似三角形得到計(jì)算物體到相機(jī)的距離的公式:
b90c7cbc-6f0c-11ed-8abf-dac502259ad0.svg

原理大概就是這樣,接下來使用 OpenCV 來實(shí)現(xiàn)。

獲取目標(biāo)輪廓

# import the necessary packages
from imutils import paths
import numpy as np
import imutils
import cv2
def find_marker(image):
    # convert the image to grayscale, blur it, and detect edges
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (5, 5), 0)
    edged = cv2.Canny(gray, 35, 125)
    # find the contours in the edged image and keep the largest one;
    # we'll assume that this is our piece of paper in the image
    cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
    cnts = imutils.grab_contours(cnts)
    c = max(cnts, key = cv2.contourArea)
    # compute the bounding box of the of the paper region and return it
    return cv2.minAreaRect(c)

定義一個(gè) find_marker 函數(shù),接收一個(gè)參數(shù) iamge,用來找到要計(jì)算距離的物體。這里我們用一張 8.5 x 11 英寸的紙作為目標(biāo)物體。第一個(gè)任務(wù)是在圖片中找到目標(biāo)物體。

下面這三行是先將圖片轉(zhuǎn)換為灰度圖,并進(jìn)行輕微模糊處理以去除高頻噪聲,然后進(jìn)行邊緣檢測(cè)。

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(gray, 35, 125)

做了這幾步后圖片看起來是這樣的:

現(xiàn)在已經(jīng)可以清晰地看到這張紙的邊緣,接下來需要做的是找出這張紙的輪廓。

cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
c = max(cnts, key = cv2.contourArea)

用 cv2.findContours 函數(shù)找到圖片中的眾多輪廓,然后獲取其中面積最大的輪廓,并假設(shè)這是目標(biāo)物體的輪廓。

這種假設(shè)只適用于我們這個(gè)場(chǎng)景,在實(shí)際使用時(shí),在圖片中找出目標(biāo)物體的方法與應(yīng)用場(chǎng)景有很大關(guān)系。

我們這個(gè)場(chǎng)景用簡(jiǎn)單的邊緣檢測(cè)并找出最大的輪廓就可以了。當(dāng)然為了使程序更具有魯棒性,也可以用輪廓近似,并剔除不是四個(gè)點(diǎn)的輪廓(紙張是一個(gè)有四個(gè)點(diǎn)的矩形),然后再找出面積最大,具有四個(gè)點(diǎn)的輪廓。

注意: 關(guān)于這個(gè)方法,詳情可以查看這篇文章,用于構(gòu)建一個(gè)移動(dòng)文本掃描工具。

我們也可以根據(jù)顏色特征在圖片中找到目標(biāo)物體,因?yàn)槟繕?biāo)物體和背景的顏色有著很明顯的不同。還可以應(yīng)用關(guān)鍵點(diǎn)檢測(cè)(keypoint detection),局部不變性描述子(local invariant descriptors)和關(guān)鍵點(diǎn)匹配(keypoint matching)來尋找目標(biāo)。但是這些方法不在本文的討論范圍內(nèi),而且高度依賴具體場(chǎng)景。

我們現(xiàn)在得到目標(biāo)物體的輪廓了,find_marker 函數(shù)最后返回的是包含輪廓 (x, y) 坐標(biāo)、像素長(zhǎng)度和像素寬度的邊框,

計(jì)算距離

接下來該使用相似三角形計(jì)算目標(biāo)到相機(jī)的距離。

def distance_to_camera(knownWidth, focalLength, perWidth):
    # compute and return the distance from the maker to the camera
    return (knownWidth * focalLength) / perWidth

distance_to_camera 函數(shù)傳入目標(biāo)的實(shí)際寬度,計(jì)算得到的焦距和圖片上目標(biāo)的像素寬度,就可以通過相似三角形公式計(jì)算目標(biāo)到相機(jī)的距離了。

下面是調(diào)用 distance_to_camera 函數(shù)之前的準(zhǔn)備:

# initialize the known distance from the camera to the object, which
# in this case is 24 inches
KNOWN_DISTANCE = 24.0


# initialize the known object width, which in this case, the piece of
# paper is 12 inches wide
KNOWN_WIDTH = 11.0


# load the furst image that contains an object that is KNOWN TO BE 2 feet
# from our camera, then find the paper marker in the image, and initialize
# the focal length
image = cv2.imread("images/2ft.jpg")
marker = find_marker(image)
focalLength = (marker[1][0] * KNOWN_DISTANCE) / KNOWN_WIDTH

首先是測(cè)量目標(biāo)物體的寬度,和目標(biāo)物體到相機(jī)的距離,并根據(jù)上面介紹的方法計(jì)算相機(jī)的焦距。其實(shí)這些并不是真正的攝像機(jī)標(biāo)定。真正的攝像機(jī)標(biāo)定包括攝像機(jī)的內(nèi)參,相關(guān)知識(shí)可以可以查看這里。

使用 cv2.imread 函數(shù)從磁盤加載圖片,然后通過 find_marker 函數(shù)得到圖片中目標(biāo)物體的坐標(biāo)和長(zhǎng)寬信息,最后根據(jù)相似三角形計(jì)算出相機(jī)的焦距。

現(xiàn)在有了相機(jī)的焦距,就可以計(jì)算目標(biāo)物體到相機(jī)的距離了。

# loop over the images
for imagePath in sorted(paths.list_images("images")):
    # load the image, find the marker in the image, then compute the
    # distance to the marker from the camera
    image = cv2.imread(imagePath)
    marker = find_marker(image)
    inches = distance_to_camera(KNOWN_WIDTH, focalLength, marker[1][0])


    # draw a bounding box around the image and display it
    box = cv2.cv.BoxPoints(marker) if imutils.is_cv2() else cv2.boxPoints(marker)
    box = np.int0(box)
    cv2.drawContours(image, [box], -1, (0, 255, 0), 2)
    cv2.putText(image, "%.2fft" % (inches / 12),
        (image.shape[1] - 200, image.shape[0] - 20), cv2.FONT_HERSHEY_SIMPLEX,
        2.0, (0, 255, 0), 3)
    cv2.imshow("image", image)
    cv2.waitKey(0)

使用 for 循環(huán)遍歷每個(gè)圖片,計(jì)算每張圖片中目標(biāo)對(duì)象到相機(jī)的距離。在結(jié)果中,我們根據(jù)得到的輪廓信息將方框畫了出來,并顯示出了距離。

總結(jié)

通過這篇文章,我們學(xué)會(huì)了使用相似三角形計(jì)算圖片中一個(gè)已知物體到相機(jī)的距離。

需要先測(cè)量出目標(biāo)物體的實(shí)際寬度和目標(biāo)物體到相機(jī)的距離,然后使用圖像處理的方法自動(dòng)計(jì)算圖片中目標(biāo)物體的像素寬度,并使用相似三角形計(jì)算出相機(jī)的焦距。

根據(jù)相機(jī)的焦距就可以計(jì)算圖片中的目標(biāo)物體到相機(jī)的距離。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 攝像頭
    +關(guān)注

    關(guān)注

    61

    文章

    5091

    瀏覽量

    103124
  • 相機(jī)
    +關(guān)注

    關(guān)注

    5

    文章

    1578

    瀏覽量

    55804

原文標(biāo)題:【光電智造】使用OpenCV實(shí)現(xiàn)攝像頭測(cè)距

文章出處:【微信號(hào):今日光電,微信公眾號(hào):今日光電】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    機(jī)器視覺系統(tǒng)之工業(yè)相機(jī)解讀

    機(jī)器視覺系統(tǒng)是一種模擬人類視覺功能,通過光學(xué)裝置和非接觸式傳感器獲取圖像數(shù)據(jù),并進(jìn)行分析和處理,以實(shí)現(xiàn)對(duì)目標(biāo)物體的識(shí)別、測(cè)量、檢測(cè)和定位等功能的智能化系統(tǒng)。其目的是讓機(jī)器能夠理解和解釋
    的頭像 發(fā)表于 02-11 17:02 ?554次閱讀
    機(jī)器視覺系統(tǒng)之工業(yè)<b class='flag-5'>相機(jī)</b>解讀

    法蘭距離相機(jī)鏡頭系統(tǒng)的關(guān)鍵參數(shù)

    在視覺領(lǐng)域,法蘭距是一個(gè)重要的概念。它通常指的是相機(jī)鏡頭安裝法蘭的參考平面成像傳感器的距離,這一參數(shù)在機(jī)器視覺領(lǐng)域充當(dāng)重要角色,法蘭距離的精準(zhǔn)性作為一個(gè)核心參數(shù),它的精準(zhǔn)性直接影響
    的頭像 發(fā)表于 01-28 17:29 ?1135次閱讀
    法蘭<b class='flag-5'>距離</b>:<b class='flag-5'>相機(jī)</b>鏡頭系統(tǒng)的關(guān)鍵參數(shù)

    目標(biāo)追蹤的簡(jiǎn)易實(shí)現(xiàn):模板匹配

    的信息在視頻的每一幀圖象中進(jìn)行搜尋,獲取每一幀中目標(biāo)的大小和坐標(biāo)。對(duì)視頻流作目標(biāo)追蹤的好處是,我們不僅可以動(dòng)態(tài)地對(duì)物體進(jìn)行定位,還可以由此分析出被追蹤物體的速度、加速度等參數(shù),如下面這
    發(fā)表于 10-28 07:21

    【上海晶珩睿莓1開發(fā)板試用體驗(yàn)】TensorFlow-Lite物體歸類(classify)

    用。 OpenCV庫編譯成功之后,就可以新建一個(gè)線程進(jìn)行TensorFlow-Lite物體歸類了,這里我直接使用現(xiàn)成的pb和pbtxt文件,具體內(nèi)容不贅述,來看看識(shí)別效果:
    發(fā)表于 09-12 22:43

    【開發(fā)實(shí)例】基于GM-3568JHF開發(fā)板安裝OpenCV并使用視頻目標(biāo)跟蹤 ( CamShift)

    在計(jì)算機(jī)視覺領(lǐng)域,視頻目標(biāo)跟蹤是一個(gè)非常重要的任務(wù)。視頻目標(biāo)跟蹤廣泛應(yīng)用于監(jiān)控、自動(dòng)駕駛、人機(jī)交互等多個(gè)領(lǐng)域。OpenCV提供了多種目標(biāo)跟蹤算法,其中MeanShift和CamShif
    的頭像 發(fā)表于 09-02 08:04 ?795次閱讀
    【開發(fā)實(shí)例】基于GM-3568JHF開發(fā)板安裝<b class='flag-5'>OpenCV</b>并使用視頻<b class='flag-5'>目標(biāo)</b>跟蹤 ( CamShift)

    零成本鋼鐵俠手套!樹莓派+OpenCV 秒變手勢(shì)遙控器!

    使用樹莓派和OpenCV實(shí)時(shí)掃描并存儲(chǔ)二維碼使用樹莓派和OpenCV實(shí)現(xiàn)物體與動(dòng)物識(shí)別使用樹莓派、攝像頭和OpenCV進(jìn)行速度檢測(cè)用樹莓派+
    的頭像 發(fā)表于 08-16 16:16 ?1274次閱讀
    零成本鋼鐵俠手套!樹莓派+<b class='flag-5'>OpenCV</b> 秒變手勢(shì)遙控器!

    如何使用樹莓派與OpenCV實(shí)現(xiàn)面部和運(yùn)動(dòng)追蹤的云臺(tái)系統(tǒng)?

    使用樹莓派和OpenCV實(shí)時(shí)掃描并存儲(chǔ)二維碼使用樹莓派和OpenCV實(shí)現(xiàn)物體與動(dòng)物識(shí)別使用樹莓派、攝像頭和OpenCV進(jìn)行速度檢測(cè)用樹莓派+
    的頭像 發(fā)表于 08-14 17:45 ?1593次閱讀
    如何使用樹莓派與<b class='flag-5'>OpenCV</b><b class='flag-5'>實(shí)現(xiàn)</b>面部和運(yùn)動(dòng)追蹤的云臺(tái)系統(tǒng)?

    如何使用樹莓派+OpenCV實(shí)現(xiàn)姿態(tài)估計(jì)和面部特征點(diǎn)追蹤?

    使用樹莓派和OpenCV實(shí)時(shí)掃描并存儲(chǔ)二維碼使用樹莓派和OpenCV實(shí)現(xiàn)物體與動(dòng)物識(shí)別使用樹莓派、攝像頭和OpenCV進(jìn)行速度檢測(cè)今天是第一
    的頭像 發(fā)表于 08-13 17:44 ?1312次閱讀
    如何使用樹莓派+<b class='flag-5'>OpenCV</b><b class='flag-5'>實(shí)現(xiàn)</b>姿態(tài)估計(jì)和面部特征點(diǎn)追蹤?

    【GM-3568JHF開發(fā)板免費(fèi)體驗(yàn)】OpenCV 視頻目標(biāo)跟蹤 ( CamShift)

    目標(biāo)區(qū)域的質(zhì)心。 3)移動(dòng)窗口:將窗口中心移動(dòng)到質(zhì)心位置。 4)調(diào)整窗口大小和方向:根據(jù)目標(biāo)的尺寸和方向調(diào)整窗口。 5)迭代:重復(fù)步驟 2 4,直到窗口中心不再變化或達(dá)到最大迭代次數(shù)。 O
    發(fā)表于 08-09 13:19

    基于凌智視覺識(shí)別模塊的基于單目視覺的目標(biāo)測(cè)量裝置

    1.視覺測(cè)量整體方案本視覺測(cè)量系統(tǒng)采用單目視覺技術(shù)實(shí)現(xiàn)目標(biāo)距離
    的頭像 發(fā)表于 07-31 15:35 ?979次閱讀
    基于凌智視覺識(shí)別模塊的基于單目視覺的<b class='flag-5'>目標(biāo)</b>物<b class='flag-5'>測(cè)量</b>裝置

    【Milk-V Duo S 開發(fā)板免費(fèi)體驗(yàn)】SDK編譯、人臉檢測(cè)、OpenCV測(cè)試

    -mobile-test ./opencv-mobile-test 生成 200x200 尺寸的 out.jpg 圖像,即實(shí)現(xiàn)圖片壓縮。 該測(cè)試工程可結(jié)合物體識(shí)別模型,實(shí)現(xiàn)輸入圖像
    發(fā)表于 07-11 13:48

    為何激光三維掃描無需噴粉也能精準(zhǔn)測(cè)量高反光物體?—— 基于光學(xué)抗反射技術(shù)的突破

    噴粉也能實(shí)現(xiàn)高反光物體的精準(zhǔn)測(cè)量,為該領(lǐng)域帶來新突破。 傳統(tǒng)高反光物體測(cè)量的困境與技術(shù)瓶頸 傳統(tǒng)激光三維掃描基于三角測(cè)距原理,高反光
    的頭像 發(fā)表于 06-27 09:58 ?647次閱讀
    為何激光三維掃描無需噴粉也能精準(zhǔn)<b class='flag-5'>測(cè)量</b>高反光<b class='flag-5'>物體</b>?—— 基于光學(xué)抗反射技術(shù)的突破

    給予多路復(fù)用器的多目標(biāo)阻抗測(cè)量,測(cè)不準(zhǔn)

    我設(shè)計(jì)了一個(gè)arduino控制ADG32多路復(fù)用器進(jìn)行目標(biāo)切換的電路,用來切換不同的測(cè)量目標(biāo),現(xiàn)在發(fā)現(xiàn),當(dāng)所有測(cè)量目標(biāo)都接上的時(shí)候,阻抗會(huì)降
    發(fā)表于 06-11 15:50

    基于LockAI視覺識(shí)別模塊:C++目標(biāo)檢測(cè)

    的基本概念,并提供了詳細(xì)的API文檔說明,幫助開發(fā)者理解和實(shí)現(xiàn)目標(biāo)檢測(cè)與可視化功能。通過上述流程,可以構(gòu)建高效的實(shí)時(shí)目標(biāo)檢測(cè)系統(tǒng),滿足多種應(yīng)用場(chǎng)景的需求。
    發(fā)表于 06-06 14:43

    如何用OpenCV相機(jī)捕捉視頻進(jìn)行人臉檢測(cè)--基于米爾NXP i.MX93開發(fā)板

    本文將介紹基于米爾電子MYD-LMX93開發(fā)板(米爾基于NXPi.MX93開發(fā)板)的基于OpenCV的人臉檢測(cè)方案測(cè)試。OpenCV提供了一個(gè)非常簡(jiǎn)單的接口,用于相機(jī)捕捉一個(gè)視頻(我用的電腦內(nèi)置
    的頭像 發(fā)表于 04-15 11:51 ?809次閱讀
    如何用<b class='flag-5'>OpenCV</b>的<b class='flag-5'>相機(jī)</b>捕捉視頻進(jìn)行人臉檢測(cè)--基于米爾NXP i.MX93開發(fā)板