如何利用OpenCV尋找輪廓的中心?
簡 介:
本文介紹了利用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)行閾值處理。
輸出的圖像如下圖所示:
可以注意到,經(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)容。