如何使用Python+OpenCV在圖像上找到并繪制等高線?
在地形圖中,你有沒有注意到在山區(qū)和地形圖中海拔高的區(qū)域周圍畫的線?這些線被稱為地形等高線。它們給出了地形的高程剖面圖。這些線條要么是手工繪制的,要么是電腦生成的。
在本文中,我們將看到如何使用OpenCV在一個簡單的圖像上繪制等高線。
findContours函數(shù)OpenCV為我們提供了“findContours”函數(shù),該函數(shù)在二值圖像中查找輪廓,并將其存儲為一個numpy坐標(biāo)點數(shù)組。函數(shù)定義如下。cv.findContours(image,
mode,
method[,
contours[,
hierarchy[,
offset]]]) ->contours, hierarchy
image-源,一個8位單通道圖像。非零像素被視為1。零像素仍然是0,所以圖像被視為二進制。mode-輪廓檢索模式。method-等值線近似法。以及其他三個可選參數(shù)。輪廓檢索模式第二個參數(shù),即輪廓檢索方式,用于檢索圖像中輪廓之間的關(guān)系。例如,在圖像中,可能會有輪廓內(nèi)的輪廓,就像嵌套輪廓一樣。在這種情況下,我們稱外部輪廓為父線,稱內(nèi)部輪廓為子線。在使用findContours函數(shù)時,應(yīng)該檢索輪廓之間的這些關(guān)系,并將其存儲在一個變量中。如果需要的話,它們也可以在未來使用。OpenCV中有四種檢索模式,分別是cv.RETR_LIST,cv.RETR_TREE,cv.RETR_CCOMP,cv.RETR_EXTERNAL。為了清楚地了解檢索模式,強烈建議參考OpenCV的輪廓官方教程:https://docs.opencv.org/master/d9/d8b/tutorial_py_contours_hierarchy.html。輪廓近似方法OpenCv中有兩種輪廓逼近方法。它們是cv.CHAIN_APPROX_NONE和cv.CHAIN_APPROX_SIMPLE。如果通過cv.CHAIN_APPROX_NONE,則將存儲輪廓的所有邊界點。但實際上,我們需要所有的點嗎?例如,你發(fā)現(xiàn)了一條直線的輪廓線。需要這條直線上的所有點來表示這條直線嗎?不,我們只需要這條線的兩個端點。這就是cv.CHAIN_APPROX_SIMPLE所做的。它刪除所有冗余點并壓縮輪廓,從而節(jié)省內(nèi)存。drawContours函數(shù)找到等高線后,將等高線的坐標(biāo)點(x, y)存儲在一個數(shù)組中,就可以用這些點在圖像上繪制等高線。我們使用OpenCV的drawcontour函數(shù)來做同樣的事情。cv.drawContours(image,
contours,
contourIdx,
color[,
thickness[,
lineType[,
hierarchy[,
maxLevel[,
offset]]]]]) ->image
image- 目標(biāo)圖像。contours-所有輸入的輪廓線。每個輪廓被存儲為一個點向量。contourIdx-表示要繪制的輪廓的參數(shù)。如果是負(fù)數(shù),則畫出所有的等高線。color-輪廓的顏色。thickness-繪制輪廓時所用的線的粗細(xì)。如果為負(fù)值(例如,thickness=FILLED),則繪制輪廓內(nèi)部,F(xiàn)在,我們已經(jīng)學(xué)習(xí)了函數(shù)findContours和drawContours,讓我們運行一個簡單的代碼以將這些函數(shù)應(yīng)用于圖像:這是原始圖像:
import cv2 as cv
#read the image
img = cv.imread("D://medium_blogs//pattern1.jpg")
#convert the image to grayscale
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#blur image to reduce the noise in the image while thresholding
blur = cv.blur(gray, (10,10))
#Apply thresholding to the image
ret, thresh = cv.threshold(blur, 1, 255, cv.THRESH_OTSU)
#find the contours in the image
contours, heirarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
#draw the obtained contour lines(or the set of coordinates forming a line) on the original image
cv.drawContours(img, contours, -1, (0,255,0), 20)
#show the image
cv.namedWindow('Contours',cv.WINDOW_NORMAL)
cv.namedWindow('Thresh',cv.WINDOW_NORMAL)
cv.imshow('Contours', img)
cv.imshow('Thresh', thresh)
if cv.waitKey(0):
cv.destroyAllWindows()
閾值圖像和畫上輪廓的原始圖像如下。閾值圖像:
原始圖像上繪制的等高線:
這就是如何在圖像上找到并繪制等高線的方法。你也可以在地圖上試試看。

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-9.1立即下載>> 【限時下載】ADI中國三十周年感恩回饋助力企業(yè)升級!
-
即日-9.16點擊進入 >> 【限時福利】TE 2025國際物聯(lián)網(wǎng)展·深圳站
-
10月23日立即報名>> Works With 開發(fā)者大會深圳站
-
10月24日立即參評>> 【評選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評選
-
11月27日立即報名>> 【工程師系列】汽車電子技術(shù)在線大會
-
12月18日立即報名>> 【線下會議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
推薦專題
- 1 阿里首位程序員,“掃地僧”多隆已離職
- 2 先進算力新選擇 | 2025華為算力場景發(fā)布會暨北京xPN伙伴大會成功舉辦
- 3 宇樹機器人撞人事件的深度剖析:六維力傳感器如何成為人機安全的關(guān)鍵屏障
- 4 清華跑出具身智能獨角獸:給機器人安上眼睛和大腦,融資近20億
- 5 特朗普要求英特爾首位華人 CEO 辭職
- 6 踢館大廠和微軟,剖析WPS靈犀的AI實用主義
- 7 騰訊 Q2 財報亮眼:AI 已成第二增長曲線
- 8 谷歌吹響AI沖鋒號,AI還有哪些機會
- 9 蘋果把身家押在Siri上:一場輸不起的自我革命
- 10 共探合作新機遇!江門市新會區(qū)(深圳)“AI + 機器人” 產(chǎn)業(yè)對接會成功舉辦