如何利用OpenCV尋找輪廓的中心?

      網(wǎng)友投稿 1291 2022-05-29

      簡 介:

      本文介紹了利用OpenCV和Python編程來計算形狀輪廓的中心點(diǎn)。當(dāng)然后面還會繼續(xù)給出如何通過輪廓來分辨物體形狀種類,以及對于各自的顏色進(jìn)行標(biāo)準(zhǔn)。

      關(guān)鍵詞:

      OpenCV,contours,中心點(diǎn)

      尋找輪廓的中心

      目 錄

      Contents

      形狀檢測和分析

      利用OpenCV尋

      找邊界中心點(diǎn)

      總 結(jié)

      尋找輪廓的中心

      目 錄

      Contents

      形狀檢測和分析

      利用OpenCV尋

      找邊界中心點(diǎn)

      總 結(jié)

      天在圖像處理中需要用到OpenCV的輪廓中心,在 OpenCV center of contour 中看到了給定的方法。將其總結(jié)如下,便于以后的應(yīng)用。

      1.1 形狀檢測和分析

      今天我們開啟一個新的三聯(lián)示例程序,用于形狀檢測和分析。通過這個系列,我們可以:

      1. 計算邊界、形狀的中心點(diǎn);

      2. 識別不同的形狀,比如圓形、方形,舉行,三角形,五邊形。這些僅僅根據(jù)邊界的性質(zhì)就可以進(jìn)行識別;

      3. 標(biāo)示形狀的顏色。

      相比于PyImageSearch網(wǎng)文來說,這個話題比較基礎(chǔ),但是為了回應(yīng)下面我所遇到的提問:

      我如何能夠使用Python和OpenCV計算邊界的中心點(diǎn)?

      今天的博文中,我將回答上面的問題。

      在這個系列的上一篇博文中,我們基于已經(jīng)知曉了物體的邊界然后來識別圖像中的形狀。

      1.2 利用OpenCV尋找邊界中心點(diǎn)

      在上面的圖像中,你可以看到一系列從建筑紙張材料切割下來的不同形狀,也注意到他們并不是完美的多邊形,也就是長方形并不是嚴(yán)格的長方形,圓形也不是那么的圓。畢竟它們是人徒手繪制出并切割下來的形狀,所以包含了不同的變形。

      記住這一點(diǎn),今天的教程的目的是:

      檢測圖片中各種形狀的外輪廓;

      接著計算所有形狀的中心點(diǎn),也稱為區(qū)域的中心;

      為了實(shí)現(xiàn)這個目標(biāo),我們需要進(jìn)行一些圖像處理,包括:

      將圖片轉(zhuǎn)換成灰度圖;

      進(jìn)行模糊化來提高輪廓檢測精度;

      將圖像進(jìn)行二值化;采用經(jīng)典的邊緣檢測和閾值處理完成二值化。這里采用閾值處理的方式。

      在開始正式編程之前,你需要先保證在你的系統(tǒng)中已經(jīng)安裝了 imutils Python Packages :

      pip install --upgrade imutils

      1

      現(xiàn)在我們可以開始編程了。

      建立一個新的文件,命名為: center_of_shape.py,下面是相應(yīng)的代碼:

      # import the necessary packages import argparse import imutils import cv2 # construct the argument parse and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="path to the input image") args = vars(ap.parse_args()) # load the image, convert it to grayscale, blur it slightly, # and threshold it image = cv2.imread(args["image"]) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5, 5), 0) thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      2 - 4 行為輸入相應(yīng)的軟件包,接著對于命令行參數(shù)進(jìn)行分析。 我們只需要單開關(guān)量 ---image ,這是給出我們需要處理的圖片在磁盤上的路徑。

      我們將該圖像從磁盤上載入到及其內(nèi)存,使用灰度轉(zhuǎn)換進(jìn)行預(yù)處理。采用5×5尺寸的高斯核完成圖像平滑,最后進(jìn)行閾值處理。

      如何利用OpenCV尋找輪廓的中心?

      輸出的圖像如下圖所示:

      可以注意到,經(jīng)過閾值處理,各類形狀為白色,背景為黑色。

      下一步就是找到這些區(qū)域的邊緣:

      # find contours in the thresholded image cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts)

      1

      2

      3

      4

      在程序中的20 - 21 行,調(diào)用 cv2.findContours 返回形狀的輪廓,對應(yīng)的圖片中白色大塊區(qū)域的邊緣。 根據(jù)所使用的OpenCV的版本不同, 2.4.3,2.3.4 行22 使用恰當(dāng)?shù)脑M參數(shù)。你可以在 這個鏈接 看到關(guān)于不同OpenCV版本在 cv2.findContours 函數(shù)返回的不同參數(shù)。

      下面我們開始處理每一個輪廓:

      # loop over the contours for c in cnts: # compute the center of the contour M = cv2.moments(c) cX = int(M["m10"] / M["m00"]) cY = int(M["m01"] / M["m00"]) # draw the contour and center of the shape on the image cv2.drawContours(image, [c], -1, (0, 255, 0), 2) cv2.circle(image, (cX, cY), 7, (255, 255, 255), -1) cv2.putText(image, "center", (cX - 20, cY - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) # show the image cv2.imshow("Image", image) cv2.waitKey(0)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      程序行 25 是開始一個循環(huán)來處理每一個單個輪廓,緊接著 程序行27 計算他們的圖像矩( image moments )。

      在計算機(jī)視覺和圖像處理中,圖像矩表征了圖像中物體的形狀。這些矩給出了 形狀的基本統(tǒng)計特征,包括物體的面積,中心(也就是物體中心 ( x , y ) \left( {x,y} \right) (x,y) 的坐標(biāo)位置),方向以及其他的一些可能用到的特性。

      這里我們只對輪廓的中心感興趣,通過程序行 28 - 29 我們計算獲得輪廓的中心點(diǎn)。

      從程序行 32-34 進(jìn)行如下的處理:

      通過使用 cv2.drawContours 在當(dāng)前形狀周圍繪制輪廓;

      在形狀中心 (cX, cY) 繪制白色圓圈;

      在白色圓圈附近輸出字符text。

      在計算機(jī)命令窗口使用下面的命令運(yùn)行上述Python程序:

      $ python center_of_shape.py --image shapes_and_colors.png

      1

      下面是顯示的運(yùn)行結(jié)果:

      [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-RBoGbgBA-1643421016158)(https://pyimagesearch.com/wp-content/uploads/2016/01/center_of_contour_results.gif#pic_center =560x )]

      你可以看到每一個形狀都被正確的檢測到。

      文介紹了利用OpenCV和Python編程來計算形狀輪廓的中心點(diǎn)。當(dāng)然后面還會繼續(xù)給出如何通過輪廓來分辨物體形狀種類,以及對于各自的顏色進(jìn)行標(biāo)準(zhǔn)。

      ■ 相關(guān)文獻(xiàn)鏈接:

      OpenCV center of contour

      imutils Python Packages

      這個鏈接

      image moments

      ● 相關(guān)圖表鏈接:

      圖1.1.1 下面將要使用到的具有很多不同顏色形狀的圖片

      圖1.2.2 將圖片進(jìn)行閾值處理輸出二值化的圖片,這類形狀為白色,背景為黑色

      OpenCV Python

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:在Google使用Borg進(jìn)行大規(guī)模集群的管理 3-4
      下一篇:c++開發(fā)環(huán)境構(gòu)建(一)——編譯器選擇
      相關(guān)文章
      亚洲人成人无码网www国产| 久久久久久a亚洲欧洲aⅴ| 国产性爱在线观看亚洲黄色一级片| 亚洲日本久久一区二区va| 亚洲AV日韩AV天堂久久| 亚洲欭美日韩颜射在线二| 亚洲人成网站观看在线播放| 亚洲国产精品成人一区| WWW亚洲色大成网络.COM| 亚洲精品无码久久久久秋霞| 亚洲色一区二区三区四区| 国产精品亚洲综合五月天| 亚洲第一成人在线| 亚洲伦理中文字幕| 久久亚洲精品国产亚洲老地址 | 亚洲视频在线观看网站| 亚洲一区二区中文| 亚洲黄色网址大全| 91亚洲自偷在线观看国产馆| 亚洲国产成人手机在线电影bd | 亚洲人成色77777在线观看大| 亚洲另类少妇17p| 久久久久久A亚洲欧洲AV冫| 亚洲午夜日韩高清一区| 青青草原亚洲视频| 777亚洲精品乱码久久久久久| 精品亚洲成a人片在线观看少妇| 亚洲综合激情另类小说区| 亚洲日本在线播放| 亚洲一级免费视频| 99久久婷婷国产综合亚洲| 亚洲日韩一中文字暮| 亚洲AV日韩AV一区二区三曲| 国产一区二区三区亚洲综合| 亚洲精品亚洲人成在线观看下载 | 久久亚洲精品专区蓝色区| 亚洲欧美日韩中文高清www777| 亚洲AV无码专区在线观看成人| 国产亚洲福利一区二区免费看| 亚洲日韩国产精品乱| 国产亚洲婷婷香蕉久久精品|