chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

簡述我們該如何使用OpenCV測量圖像中物體之間的距離

新機器視覺 ? 來源: OpenCV視覺實踐 ? 作者: OpenCV視覺實踐 ? 2021-03-12 11:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

計算物體之間的距離與計算圖像中物體的大小算法思路非常相似——都是從參考對象開始的。我們將使用0.25美分作為我們的參考對象,它的寬度為0.955英寸。

并且我們還將0.25美分總是放在圖片最左側使其容易識別。這樣它就滿足了我們上面提到的參考對象的兩個特征。

我們的目標是找到0.25美分,然后利用0.25美分的尺寸來測量0.25美分硬幣與所有其他物體之間的距離。

定義參考對象并計算距離

打開一個新文件,將其命名為distance_between.py,插入以下代碼:

# import the necessary packagesfrom scipy.spatial import distance as distfrom imutils import perspectivefrom imutils import contoursimport numpy as npimport argparseimport imutilsimport cv2def midpoint(ptA, ptB):return ((ptA[0] + ptB[0]) * 0.5, (ptA[1] + ptB[1]) * 0.5)# construct the argument parse and parse the argumentsap = argparse.ArgumentParser()ap.add_argument("-i", "--image", required=True,help="path to the input image")ap.add_argument("-w", "--width", type=float, required=True,help="width of the left-most object in the image (in inches)")args = vars(ap.parse_args())

我們這里的代碼與上周的代碼幾乎相同。我們從在第2-8行上導入所需的Python包開始。第12-17行解析命令行參數(shù)。這里我們需要兩個參數(shù):——image,它是包含我們想要測量的對象的輸入圖像的路徑,以及——width,為我們參考對象的寬度(單位為英寸)。

接下來,我們需要對圖像進行預處理:

# load the image, convert it to grayscale, and blur it slightlyimage = cv2.imread(args["image"])gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)gray = cv2.GaussianBlur(gray, (7, 7), 0)# perform edge detection, then perform a dilation + erosion to# close gaps in between object edgesedged = cv2.Canny(gray, 50, 100)edged = cv2.dilate(edged, None, iterations=1)edged = cv2.erode(edged, None, iterations=1)# find contours in the edge mapcnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)cnts = imutils.grab_contours(cnts)# sort the contours from left-to-right and, then initialize the# distance colors and reference object(cnts, _) = contours.sort_contours(cnts)colors = ((0, 0, 255), (240, 0, 159), (0, 165, 255), (255, 255, 0),(255, 0, 255))refObj = None

第2-4行從磁盤加載圖像,將其轉換為灰度圖,然后使用7 x 7內(nèi)核的高斯濾波器對其進行模糊降噪。

當我們的圖像被模糊后,我們應用Canny邊緣檢測器來檢測圖像中的邊緣,然后進行膨脹+腐蝕來縮小邊緣圖中的縫隙(第7-9行)。

調(diào)用cv2.findContours檢測邊緣圖中對象的輪廓(第11-13行),而第16行從左到右對輪廓進行排序。由于我們知道0.25美分(即參考對象)將始終是圖像中最左邊,因此從左到右對輪廓進行排序可以確保與參考對象對應的輪廓始終是cnts列表中的第一個。

然后,我們初始化用于繪制距離的colors列表以及refObj變量,該變量將存儲參考對象的邊界框、質(zhì)心和pixels-per-metric值(看上一篇就明白pixels-per-metric的具體定義,其實就是參考對象的實際大?。▎挝挥⒋纾┡c圖片中的寬度(單位為像素)的比值)。

# loop over the contours individuallyfor c in cnts:# if the contour is not sufficiently large, ignore itif cv2.contourArea(c) < 100:continue# compute the rotated bounding box of the contourbox = cv2.minAreaRect(c)box = cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box)box = np.array(box, dtype="int")# order the points in the contour such that they appear# in top-left, top-right, bottom-right, and bottom-left# order, then draw the outline of the rotated bounding# boxbox = perspective.order_points(box)# compute the center of the bounding boxcX = np.average(box[:, 0])cY = np.average(box[:, 1])

在第2行,我們開始對cnts列表中的每個輪廓進行循環(huán)。如果輪廓比較小(第4和5行),我們認為是噪聲并忽略它。

然后,第7-9行計算當前對象的最小旋轉包圍框。

第14行上調(diào)用order_points函數(shù)(此系列第一篇定義的函數(shù))來對矩形框四個頂點以左上角、右上角、右下角和左下角的順序排列,我們將看到,在計算物體之間的距離時,這一點非常重要。

第16行和第17行通過取邊界框在x和y方向上的平均值來計算旋轉后的邊界框的中心(x, y)坐標。

下一步是校準我們的refObj:

# if this is the first contour we are examining (i.e.,# the left-most contour), we presume this is the# reference objectif refObj is None:# unpack the ordered bounding box, then compute the# midpoint between the top-left and top-right points,# followed by the midpoint between the top-right and# bottom-right(tl, tr, br, bl) = box(tlblX, tlblY) = midpoint(tl, bl)(trbrX, trbrY) = midpoint(tr, br)# compute the Euclidean distance between the midpoints,# then construct the reference objectD = dist.euclidean((tlblX, tlblY), (trbrX, trbrY))refObj = (box, (cX, cY), D / args["width"])continue

如果refObj為None(第4行),則需要對其進行初始化。

我們首先獲取(排序后的)最小旋轉邊界框坐標,并分別計算四個頂點之間的中點(第10-15行)。

然后計算中點之間的歐氏距離,給出我們的“像素/尺寸”比例,來確定一英寸為多少像素寬度。

最后,我們將refObj實例化為一個3元組,包括:

  • 物體對象的最小旋轉矩形對象box

  • 參考對象的質(zhì)心。

  • 像素/寬度比例,我們將用其來結合物體之間的像素距離來確定物體之間的實際距離。

下一個代碼塊負責繪制參考對象和當前檢查對象的輪廓,然后定義變量refCoords和objCoords,這樣(1)最小包圍矩陣坐標和(2)質(zhì)心的(x, y)坐標都包含在同一個數(shù)組中:

# draw the contours on the imageorig = image.copy()cv2.drawContours(orig, [box.astype("int")], -1, (0, 255, 0), 2)cv2.drawContours(orig, [refObj[0].astype("int")], -1, (0, 255, 0), 2)# stack the reference coordinates and the object coordinates# to include the object centerrefCoords = np.vstack([refObj[0], refObj[1]])objCoords = np.vstack([box, (cX, cY)])

現(xiàn)在我們可以開始計算圖像中各個物體的質(zhì)心和質(zhì)心之間的距離了:
# loop over the original points

for ((xA, yA), (xB, yB), color) in zip(refCoords, objCoords, colors):# draw circles corresponding to the current points and# connect them with a linecv2.circle(orig, (int(xA), int(yA)), 5, color, -1)cv2.circle(orig, (int(xB), int(yB)), 5, color, -1)cv2.line(orig, (int(xA), int(yA)), (int(xB), int(yB)),color, 2)# compute the Euclidean distance between the coordinates,# and then convert the distance in pixels to distance in# unitsD = dist.euclidean((xA, yA), (xB, yB)) / refObj[2](mX, mY) = midpoint((xA, yA), (xB, yB))cv2.putText(orig, "{:.1f}in".format(D), (int(mX), int(mY - 10)),cv2.FONT_HERSHEY_SIMPLEX, 0.55, color, 2)# show the output imagecv2.imshow("Image", orig)cv2.waitKey(0)

在第2行,我們開始對圖片中物體對象的頂點(x, y)坐標進行循環(huán)。

然后我們畫一個圓表示我們正在計算距離的當前點坐標,并畫一條線連接這些點(第5-7條線)。

然后,第12行計算參考位置和對象位置之間的歐式距離,然后除以“像素/度量”,得到兩個對象之間的實際距離(以英寸為單位)。然后在圖像上標識出計算的距離(第13-15行)。

距離測量結果

下面是一個GIF動畫,演示了我們的程序運行效果:

在每種情況下,我們的腳本都匹配左上(紅色)、右上(紫色)、右下(橙色)、左下(藍綠色)和質(zhì)心(粉色)坐標,然后計算參考對象和當前對象之間的距離(以英寸為單位)。

注意圖像中的兩個0.25美分完全平行,這意味著所有五個頂點之間的距離均為6.1英寸。

下面是第二個例子,這次計算的是參考對象和藥丸之間的距離:

這個例子可以作為藥片分類機器人的輸入,自動獲取一組藥片,并根據(jù)它們的大小和與藥片容器的距離來組織它們。

編輯:jq


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

    關注

    32

    文章

    642

    瀏覽量

    42897

原文標題:使用OpenCV測量圖像中物體之間的距離

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    超聲波測距換能器:工業(yè)與生活測量利器

    在科技飛速發(fā)展的今天,各類傳感器在各個領域發(fā)揮著至關重要的作用。其中,超聲波測距換能器憑借其獨特的優(yōu)勢,成為了距離測量領域的明星產(chǎn)品。無論是工業(yè)生產(chǎn)中的精密檢測,還是日常生活的智能應用,超聲波測距
    發(fā)表于 07-02 16:20

    為何激光三維掃描無需噴粉也能精準測量高反光物體?—— 基于光學抗反射技術的突破

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

    itop-3568開發(fā)板機器視覺opencv開發(fā)手冊-圖像繪制-畫線

    demo11_line.py 然后向該文件添加以下內(nèi)容: 第 1 行和第 2 行分別導入了 opencv 和 numpy 庫; 第 3 行使用 zeros()函數(shù)創(chuàng)建一個 512x512 的黑色圖片; 第 4 行使
    發(fā)表于 06-04 10:38

    基于LockAI視覺識別模塊:C++使用圖像的統(tǒng)計信息

    圖像處理,統(tǒng)計信息可以幫助我們了解圖像的特性,例如區(qū)域內(nèi)的像素分布、顏色轉換以及特定區(qū)域的分析。本文將介紹基于LockAI視覺識別模塊如何提取興趣區(qū)域(ROI)、轉換顏色通道、計算
    發(fā)表于 05-08 10:31

    基于LockAI視覺識別模塊:C++圖像的基本運算

    圖像處理,理解圖像的基本操作是掌握計算機視覺技術的關鍵。本文章將介紹 基于LockAI視覺識別模塊下OpenCV
    發(fā)表于 05-06 16:56

    電機、變頻器之間距離多少為宜?·

    分析與實際應用兩個角度,深入探討電機與變頻器之間距離多少為宜的問題。 一、距離分類與影響 首先,我們需要明確電機與變頻器之間距離的界定。一般而言,根據(jù)
    的頭像 發(fā)表于 04-17 16:44 ?428次閱讀
    電機、變頻器<b class='flag-5'>之間</b>的<b class='flag-5'>距離</b>多少為宜?·

    圖像尺寸測量優(yōu)勢:數(shù)量識別

    普密斯圖像尺寸測量儀運用了先進的光學成像與圖像處理技術,這一技術是其實現(xiàn)高效精準測量的核心。當面對多個電子產(chǎn)品同時測量時,
    的頭像 發(fā)表于 01-17 15:13 ?471次閱讀
    <b class='flag-5'>圖像</b>尺寸<b class='flag-5'>測量</b>優(yōu)勢:數(shù)量識別

    AI模型部署邊緣設備的奇妙之旅:如何在邊緣端部署OpenCV

    視覺領域最有力的研究工具。在深度學習,我們會經(jīng)常接觸到兩個名稱,圖像處理和計算機視覺,它們之間有什么區(qū)別呢? 圖像處理 (Image Pr
    發(fā)表于 12-14 09:31

    AI模型部署邊緣設備的奇妙之旅:如何在邊緣端部署OpenCV

    力的研究工具。在深度學習,我們會經(jīng)常接觸到兩個名稱,圖像處理和計算機視覺,它們之間有什么區(qū)別呢?圖像處理(ImageProcessing)
    的頭像 發(fā)表于 12-14 09:10 ?899次閱讀
    AI模型部署邊緣設備的奇妙之旅:如何在邊緣端部署<b class='flag-5'>OpenCV</b>

    如何遠距離的傳輸camera圖像呢?

    如何遠距離的傳輸camera圖像呢?camera可以是lvds,mipi等接口。
    發(fā)表于 12-12 07:32

    基于OpenCV的拆分和合并圖像通道實驗案例分享_基于RK3568教學實驗箱

    一、實驗目的 本節(jié)視頻的目的是了解圖像通道的概念,學習OpenCV的基本操作,并掌握通過OpenCV實現(xiàn)拆分和合并圖像通道的方法。 二、實驗原理 拆分與合并
    發(fā)表于 12-03 14:27

    一個月速成python+OpenCV圖像處理

    OpenCV是一個廣受歡迎且極為流行的計算機視覺庫,它因其強大的功能、靈活性和開源特性而在開發(fā)者和研究者備受青睞。學習OpenCV主要就是學習里面的計算機視覺算法。要學習這些算法的原理,知道它們
    的頭像 發(fā)表于 11-29 18:27 ?460次閱讀
    一個月速成python+<b class='flag-5'>OpenCV</b><b class='flag-5'>圖像</b>處理

    OpenCV教程之OpenCV圖像閾值處理

    閾值的基本概念是為了簡化圖像以進行分析。當我們圖像轉換為灰度圖像時,必須記住灰度圖像仍然至少有255個值。閾值是將所有內(nèi)容轉換為白色或黑色
    的頭像 發(fā)表于 11-16 10:16 ?643次閱讀
    <b class='flag-5'>OpenCV</b>教程之<b class='flag-5'>OpenCV</b><b class='flag-5'>圖像</b>閾值處理

    手寫圖像模板匹配算法在OpenCV的實現(xiàn)

    OpenCV的模板匹配是支持基于NCC相似度查找的,但是不是很好用,一個主要的原因是查找最大閾值,只能匹配一個,自己比對閾值,又導致無法正確設定閾值范圍,所以問題很多。于是我重新寫了純Python版本的NCC圖像模板匹配的代碼
    的頭像 發(fā)表于 11-11 10:12 ?769次閱讀
    手寫<b class='flag-5'>圖像</b>模板匹配算法在<b class='flag-5'>OpenCV</b><b class='flag-5'>中</b>的實現(xiàn)