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

基于OpenCV的攝像頭測距的實現(xiàn)示例

 更新時間:2022年01月04日 09:14:41   作者:天涯盡頭黃鶴樓  
本文主要介紹了基于OpenCV的攝像頭測距的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

去年暑假參加了一個比賽,比賽內(nèi)容中需要確定目標的位置 本來想全用圖像完成的,最后發(fā)現(xiàn)不是很符合要求。比完賽之后,就忙別的事了。直到現(xiàn)在突然想試試攝像頭測距。就來了

在這里插入圖片描述

一、測距原理

攝像頭單目測距原理及實現(xiàn)

空間的深度或距離等數(shù)據(jù)的攝像頭。

人的眼睛長在頭部的前方,兩只眼的視野范圍重疊,兩眼同時看某一物體時,產(chǎn)生的視覺稱為雙眼視覺。

雙眼視覺的優(yōu)點是可以彌補單眼視野中的盲區(qū)缺損,擴大視野,并產(chǎn)生立體視覺。

在這里插入圖片描述

f為攝像頭的焦距,c為鏡頭光心

模型的主要依據(jù)公式為f/d=h/H,設(shè)物體所在平面與相機平面的距離為d,物體實際高度為H,在傳感器上的高度為h
根據(jù)這個模型,我們就能求出目標物體與我們的攝像頭平面的距離。

分兩種情況,但是這兩種情況的條件都是假設(shè)實際物體與攝像機所在平面平行。

一種是當物體主線段過光心的情況,這種情況是最容易計算的, 即 h=sqrt ((橫坐標之差*Dx)2+(縱坐標之差*Dy)2), Dx為每個像素的寬度,Dy為每個像素的高度,

二、代碼

1.引入庫

代碼如下(示例):

import cv2
from cvzone.HandTrackingModule import HandDetector
import math
import numpy as np
import cvzone

2.讀入數(shù)據(jù)

調(diào)用電腦攝像頭,或者外接別的攝像頭也可以
調(diào)用 cvzone 自帶的手部檢測器

cap = cv2.VideoCapture(0)
cap.set(3, 1280)
cap.set(4, 720)
detector = HandDetector(detectionCon=0.8, maxHands=1)

編寫函數(shù),轉(zhuǎn)化為距離循環(huán)打印顯示

while True:
    success, img = cap.read()
    hands = detector.findHands(img, draw=False)

    if hands:
        lmList = hands[0]['lmList']
        x, y, w, h = hands[0]['bbox']
        x1, y1 = lmList[5]
        x2, y2 = lmList[17]

        distance = int(math.sqrt((y2 - y1) ** 2 + (x2 - x1) ** 2))
        A, B, C = coff
        distanceCM = A * distance ** 2 + B * distance + C

        print(distanceCM, distance)

        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 255), 3)
        cvzone.putTextRect(img, f'{int(distanceCM)} cm', (x+5, y-10))

    cv2.imshow("Image", img)
    cv2.waitKey(1)

完整代碼

import cv2
from cvzone.HandTrackingModule import HandDetector
import math
import numpy as np
import cvzone

cap = cv2.VideoCapture(0)
cap.set(3, 1280)
cap.set(4, 720)

# Hand Detector
detector = HandDetector(detectionCon=0.8, maxHands=1)

# Find Function
# x is the raw distance y is the value in cm
x = [300, 245, 200, 170, 145, 130, 112, 103, 93, 87, 80, 75, 70, 67, 62, 59, 57]
y = [20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]
coff = np.polyfit(x, y, 2)  # y = Ax^2 + Bx + C

while True:
    success, img = cap.read()
    hands = detector.findHands(img, draw=False)

    if hands:
        lmList = hands[0]['lmList']
        x, y, w, h = hands[0]['bbox']
        x1, y1 = lmList[5]
        x2, y2 = lmList[17]

        distance = int(math.sqrt((y2 - y1) ** 2 + (x2 - x1) ** 2))
        A, B, C = coff
        distanceCM = A * distance ** 2 + B * distance + C

        print(distanceCM, distance)

        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 3)
        cvzone.putTextRect(img, f'{int(distanceCM)} cm', (x+5, y-10))

    cv2.imshow("Image", img)
    cv2.waitKey(1)

效果圖:

在這里插入圖片描述

總結(jié)

通過簡單的幾行代碼,就可以實現(xiàn)視頻測距。我是以手為檢測目標測距,當然你也可以,調(diào)用別的分類檢測器,搭配目標檢測網(wǎng)絡(luò)實現(xiàn)各種物體的檢測 測距。(建議備一個,高清的攝像頭。)
本項目的視頻測距的 誤差 大概在±2cm左右。

到此這篇關(guān)于基于OpenCV的攝像頭測距的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)OpenCV攝像頭測距內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題

    今天小編就為大家分享一篇解決pycharm下os.system執(zhí)行命令返回有中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python微信庫:itchat的用法詳解

    Python微信庫:itchat的用法詳解

    本篇文章主要介紹了Python微信庫:itchat的用法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • python實現(xiàn)學(xué)生成績測評系統(tǒng)

    python實現(xiàn)學(xué)生成績測評系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)學(xué)生成績測評系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 遍歷python字典幾種方法總結(jié)(推薦)

    遍歷python字典幾種方法總結(jié)(推薦)

    下面小編就為大家?guī)硪黄闅vpython字典幾種方法總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 淺談keras2 predict和fit_generator的坑

    淺談keras2 predict和fit_generator的坑

    這篇文章主要介紹了淺談keras2 predict和fit_generator的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python?中的?asyncio?異步協(xié)程

    python?中的?asyncio?異步協(xié)程

    這篇文章主要介紹了python?中的?asyncio?異步協(xié)程?IO?教程,asyncio?執(zhí)行的任務(wù),稱為協(xié)程,但是Asyncio?并不能帶來真正的并行,下文具體的相關(guān)資料感興趣的小伙伴可以參考一下
    2022-04-04
  • Python Pandas 轉(zhuǎn)換unix時間戳方式

    Python Pandas 轉(zhuǎn)換unix時間戳方式

    今天小編就為大家分享一篇Python Pandas 轉(zhuǎn)換unix時間戳方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python執(zhí)行JS的四種方法

    Python執(zhí)行JS的四種方法

    本文將詳細介紹Python中執(zhí)行和調(diào)用JavaScript的多種方法,包括內(nèi)置的execjs庫、外部庫如PyExecJS、使用瀏覽器引擎和與Node.js的交互,感興趣的可以了解一下
    2023-11-11
  • Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫實例

    Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫實例

    這篇文章主要介紹了Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫實例,本文直接給出操作mysql代碼實例,包含創(chuàng)建表、插入數(shù)據(jù)、插入多條數(shù)據(jù)、查詢數(shù)據(jù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Django Rest framework之權(quán)限的實現(xiàn)示例

    Django Rest framework之權(quán)限的實現(xiàn)示例

    這篇文章主要介紹了Django Rest framework之權(quán)限的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論

永胜县| 沈丘县| 保亭| 泰兴市| 剑河县| 嵩明县| 新兴县| 日土县| 宁陵县| 门头沟区| 同德县| 怀宁县| 眉山市| 绍兴市| 镶黄旗| 文山县| 仁化县| 金华市| 逊克县| 弋阳县| 仁怀市| 应城市| 靖州| 屯昌县| 武威市| 福鼎市| 海伦市| 来宾市| 福清市| 龙门县| 新平| 长汀县| 淮北市| 宁津县| 道真| 桂平市| 中江县| 丹东市| 改则县| 焦作市| 宁夏|