那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用python和opencv實現單目攝像機測距

新機器視覺 ? 來源:CSDN博主O98K ? 2023-07-03 10:01 ? 次閱讀

我的論文方向目前是使用單目攝像頭實現機器人對人的跟隨,首先單目攝像頭與kinect等深度攝像頭最大的區別是無法有效獲取深度信息,那就首先從這方面入手,嘗試通過圖像獲取攝像頭與人的距離。

在網上看了幾天關于攝像頭標定和攝像頭焦距等原理的文章,然后通過這篇文章真正啟發了我:用python和opencv來測量目標到相機的距離主要的測距的原理是利用相似三角形計算物體到相機的距離。

在這里我的環境為: Ubuntu14.04 + Opencv2.4.9

一用相似三角形計算物體或者目標到相機的距離

我們將使用相似三角形來計算相機到一個已知的物體或者目標的距離。

相似三角形就是這么一回事:假設我們有一個寬度為 W 的目標或者物體。然后我們將這個目標放在距離我們的相機為 D 的位置。我們用相機對物體進行拍照并且測量物體的像素寬度 P 。這樣我們就得出了相機焦距的公式:

F = (P x D) / W

舉個例子,假設我在離相機距離 D = 24 英寸的地方放一張標準的 8.5 x 11 英寸的 A4 紙(橫著放;W = 11)并且拍下一張照片。我測量出照片中 A4 紙的像素寬度為 P = 249 像素。

因此我的焦距 F 是:

F = (248px x 24in) / 11in = 543.45

當我繼續將我的相機移動靠近或者離遠物體或者目標時,我可以用相似三角形來計算出物體離相機的距離:

D’ = (W x F) / P

為了更具體,我們再舉個例子,假設我將相機移到距離目標 3 英尺(或者說 36 英寸)的地方并且拍下上述的 A4 紙。通過自動的圖形處理我可以獲得圖片中 A4 紙的像素距離為 170 像素。將這個代入公式得:

D’ = (11in x 543.45) / 170 = 35 英寸

或者約 36 英寸,合 3 英尺。

從以上的解釋中,我們可以看到,要想得到距離,我們就要知道攝像頭的焦距和目標物體的尺寸大小,這兩個已知條件根據公式:

D’ = (W x F) / P

得出目標到攝像機的距離D,其中P是指像素距離,W是A4紙的寬度,F是攝像機焦距。

在原文中,是通過預先拍照,根據第一張照片算出攝像頭的焦距,在根據已知的焦距算出接下來的照片中白紙到攝像機的距離,這樣不太直觀,而且需要預先拍照,我將源程序改為實時測距,簡單來說就是將原來的讀入照片變為讀攝像頭,這樣的效果看起來比較直觀.源程序如下:

86b785b0-18dd-11ee-962d-dac502259ad0.jpg

在這張圖里我攝像頭距離桌面大概100cm,可以看到圖中距離為96cm,可以看到精度還可以。

需要注意的是, 如果使用的是opencv3的版本,

1. 需要將find_marker函數中

(cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

改為:

(_, cnts, _) = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

因為 In Opencv 3 API version the cv2.findCoutours()returns 3 object

image

contours

hierarchy

2. 需要將:

box = np.int0(cv2.cv.BoxPoints(marker))

改為:


box = cv2.boxPoints(marker)

box = np.int0(box)

以上兩個地方是安裝不同版本opencv需要修改的地方。

存在的問題:

1. 程序在運行時在未檢測到A4紙時有時候會報錯:

Traceback (most recent call last): File "video_paper_distance.py", line 86, in marker = find_marker(frame) File "video_paper_distance.py", line 18, in find_marker c = max(cnts, key = cv2.contourArea)

ValueError: max() arg is an empty sequence

目前關于這個錯誤,我還沒有解決,猜測主要是由于沒有檢測到目標造成max()函數為空的原因,不過沒有深究。

2. 程序是通過第一張圖已知目標到相機的距離來計算攝像頭焦距,然后再通過焦距計算接下來目標到攝像頭的距離,在這里焦距是一個關鍵的參數,所以我準備嘗試通過對攝像頭的標定直接獲取相機的像素焦距,我是通過ros的一個包實現了對相機的標定,不過通過相機標定得出的像素焦距計算出來的距離并沒有通過第一張圖片計算出的焦距計算出來的距離準確,這個具體原因也沒有搞明白,可能是我標定的結果不夠準確?

3. 在通過攝像頭測距時, 得出的距離也是準確且隨著攝像頭距離桌面遠近而線性變化的,但距離偶爾會出現突變,目前也沒找到是什么原因造成的.

ros相機標定主要參考的是這篇博客,博主是白巧克力亦唯心,ROS大神:

ROS 教程之 vision: 攝像頭標定camera calibration

這里主要記錄的是,通過攝像機標定,得到的3*3的內參數矩陣,其中M[1][1]和M[2][2]分別為我們要求的相機的x,y軸的像素焦距。

二使用相機計算人到相機的距離

在第一部分中我們已經計算出了A4紙距離相機的距離,在具體應用中,我需要計算的是人距離相機的距離,來實現機器人對目標人距離的判斷,應用與對目標人的跟隨。在這里主要的思路是先通過opencv中的HOG方法檢測到人,再根據人的預估身高和攝像頭焦距計算人到攝像機的距離。在這里選擇身高的原因在于人的身高在不同方向上變化較小,而且我們的攝像頭高度是固定的,所以選擇身高。

1.首先要使用opencv進行行人檢測:

870e4472-18dd-11ee-962d-dac502259ad0.jpg

2.將行人檢測與測距代碼結合:

875b3444-18dd-11ee-962d-dac502259ad0.png

3.存在的問題:

目前使用HOG檢測行人的效果不是很好,會把類似人體形狀的物體都框出來,比如實驗室的三腳架等物體,受背景干擾較大。程序中存在一個bug就是在沒有檢測到人時,pix_person_height會為0,這樣分母為0時無法計算,在接下來我也要通過3個方面改進,首先要想辦法進一步改進人體檢測,使用YOLO的方法目前是比較好的,但在CPU下速度較慢。然后要改進的是精度,這里需要主要的是選擇攝像頭要選擇固定焦距的攝像頭,自動變焦攝像頭焦距會變化,測量的距離也會變。最后就是盡可能完善程序,減少bug。

4 . 將要進行的工作

通過程序可以看到使用單目攝像頭檢測人到攝像頭的距離,其中一個影響較大的因素是對人體的準確檢測,如果想要使測量的距離準確(完全準確是不可能的,但要達到可以用于機器人跟隨人的功能的程度),那就要盡可能的準確的檢測出人,通過我的測試,在準確知道目標人的身高前提下,在離攝像頭固定距離上對人拍照,然后手動對人進行畫框,標定出目標人的在畫面中的高度,通過計算,得到的距離比較準確,其精度完全是可以接受的,所以接下來的工作主要是如何通過程序來準確的框出目標人來獲取其在圖像中的高度。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    211

    文章

    28640

    瀏覽量

    208395
  • 攝像頭
    +關注

    關注

    60

    文章

    4862

    瀏覽量

    96298
  • 相機
    +關注

    關注

    4

    文章

    1367

    瀏覽量

    53913
  • OpenCV
    +關注

    關注

    31

    文章

    635

    瀏覽量

    41555
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85037

原文標題:單目攝像機測距(python+opencv)

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    網絡攝像機是什么?

    (http://www.ztwl.cn/)網絡攝像機網絡攝像機就是擁有獨立的IP地址和嵌入式的操作系統從而實現網絡監控的智能化產品。輕此又被叫做IP 攝像機或IP CAMERA。 它可
    發表于 05-26 09:57

    攝像機同步方式

    ,是利用攝像機的交流電源來完成垂直推動同步,即攝像機和電源零線同步。  車載DVR外同步(EXT)利用一個外同步信號發生器產生的同步信號送到攝像機的外同步輸入端來實現同步。  同步信號
    發表于 03-04 11:04

    一個VS+OpenCV編寫的攝像機采集圖像的小程序

    這個程序是在VS2013下編寫的,用OpenCv3.00的平臺,攝像機是大恒的HV1351UM,只實現了圖像的采集,并沒有圖像處理的功能在里面。
    發表于 03-21 21:07

    網絡攝像機與模擬攝像機的區別是什么

    ,另外還可以通過網絡來控制攝像機的云臺和鏡頭,進行全方位地監控。  用公式形象表示如下:IP Camera=路DVS+Camera  其次,性能大不同:  第一、清晰度。看得更清是每個用戶追求的目標
    發表于 12-11 14:22

    用于網絡攝像機\監控攝像機鏡頭驅動芯片MS41918M-頌揚恒科技

    MS41918M是瑞盟科技推出的一款用于網絡攝像機和監控攝像機的鏡頭驅動片。芯片內置光圈控制功能;通過電壓驅動方式以及扭矩紋波修正技術,實現了超低噪聲微步驅動。主要特點:■電壓驅動方式,256 微步
    發表于 10-21 11:32

    基于攝像機的運動員姿態計算

    運動員姿態的計算是非常困難的并且有很多應用。在本文中,我們主要針對運動員身體傾角,提出了一種基于攝像機的幾何計算方法。首先,利用針孔模型對場景進行3d 重建
    發表于 08-12 08:41 ?9次下載

    CCD 攝像機質量對網絡攝像機的影響

    CCD 攝像機質量對網絡攝像機的影響提要:網絡攝象機 ( 網絡攝象服務器、視頻服務器、網絡視頻轉換器等 ) 采用的 CCD 攝像機的質量對帶寬的影響很大,采用優質
    發表于 12-29 11:23 ?768次閱讀

    網絡攝像機

    網絡攝像機   網絡攝像機是一種結合傳統攝像機與網絡技術所產生的新一代攝像機,它
    發表于 01-07 10:17 ?891次閱讀

    基于攝像機的電力設施侵入目標參數計算

    基于攝像機成像的電力設施侵入目標的參數計算,首先采用成本較低的攝像機目視覺系統,對攝像機
    發表于 07-16 16:57 ?33次下載

    基于OpenCV攝像機標定

    本文CameraCalibrator類源代碼來自于OpenCV2 計算機視覺編程手冊(Robert Laganiere 著 張靜 譯) 強烈建議閱讀機器視覺學習筆記(4)——攝像機
    發表于 02-08 03:36 ?851次閱讀

    基于OpenCV的雙目攝像機標定

    )——攝像機標定參數說明? 機器視覺學習筆記(5)——基于OpenCV
    發表于 02-08 03:41 ?774次閱讀

    opencv相機標定例程

    可選參數進行攝像機標定的程序。calibration_artificial.cpp 是程序模擬模擬攝像機標定的過程,即程序創建棋盤然后自主標定。
    發表于 12-04 17:23 ?3673次閱讀
    <b class='flag-5'>opencv</b><b class='flag-5'>單</b><b class='flag-5'>目</b>相機標定例程

    網絡攝像機和模擬攝像機_數字攝像機的區別分析

    數字攝像機包括目前市場上主流的有三種產品:網絡攝像機,SDI攝像機,網線通攝像機。網絡高清攝像機主要由視頻采集、視頻編碼、網絡傳輸等幾部分組
    發表于 01-02 15:39 ?1w次閱讀

    RFID技術融入攝像機 實現智能視頻監控

    和視頻分析技術的應用,從而實現智能視頻監控。因此融入RFID技術的攝像機應運而生,為攝像機插上感知的翅膀,使攝像機耳聰明。
    發表于 11-25 10:42 ?4008次閱讀

    攝像機和高清網絡攝像機的差別是什么,都具有什么特點

    現在,我們在看視頻的時候,都有標清、高清、超高清之分,攝像機也不例外。在目前這個對于清晰度要求越來越高的時代下,市場上的網絡攝像機的種類也越來越多,以清晰度劃分,就有標清、高清、全高清之分。那么標清
    的頭像 發表于 11-04 16:40 ?5022次閱讀
    百家乐技巧微笑心法| 永利博| 百家乐官网赌注| 百家乐网| 注册百家乐官网送彩金 | 优惠搏百家乐的玩法技巧和规则 | 百家乐官网路单怎样| 威尼斯人娱乐城投注| 网络百家乐官网软件真假| 百家乐筹码14克| 老k百家乐官网游戏| 威尼斯人娱乐场内幕| 百家乐官网赌场娱乐网规则 | 百家乐官网官网下载| 百家乐天下第一庄| 真人百家乐官网好不好玩| 七匹狼百家乐的玩法技巧和规则| 百家乐官网六合彩3535| 大发888组件下载| 星期8百家乐官网的玩法技巧和规则 | 百家乐秘诀| 太阳会百家乐官网现金网| 全讯网一码353788| 91百家乐官网的玩法技巧和规则 | 百家乐官网平注法口诀技巧| 博彩乐透乐| 678百家乐博彩娱乐平台| 百家乐官网赌博机怎么玩| 大发888娱乐城电话| 百家乐官网真人游戏| 汉寿县| 圣保罗百家乐的玩法技巧和规则 | 网上百家乐公式| 辽宁省| 手机百家乐能兑换现金棋牌游戏| 百家乐官网赌博详解| 利高| 网上百家乐娱乐网| 网上的百家乐官网是真是假| 京城国际娱乐城| 百家乐赢钱的技巧是什么|