中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中使用OpenCV標記圖像區域輪廓

發布時間:2021-03-12 17:08:50 來源:億速云 閱讀:454 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關怎么在Python中使用OpenCV標記圖像區域輪廓,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

圖片基本處理

import cv2 as cv

src = cv.imread("./demo.jpg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
# cv.imshow("src", src)

gray = cv.GaussianBlur(gray, (5, 5), 0)
edges = cv.Canny(gray, 70, 210)

cv.imshow("edged", edges)

輪廓檢測

下面就是檢測圖像輪廓具體位置的代碼了:

contours, hierarchy = cv.findContours(edges.copy(), cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE)
print(f"輪廓數量:{len(contours)}")

cv.findContours(edges, cv.RETR_LIST, cv.CHAIN_APPROX_SIMPLE) 中,第二個參數使用的是 cv.RETR_LIST,該參數值表示檢測所有輪廓,不建立等級關系,彼此獨立。如果只想獲取輪廓邊緣信息,不關心是否嵌套在另一個輪廓之內,使用該參數值即可。

第三個參數使用的是 cv.CHAIN_APPROX_SIMPLE,表示壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標,例如一個矩形輪廓只需 4 個點來保存輪廓信息,這也是為了后面便于計算。

觀察上圖,可以發現最外側的邊緣面積是最大的,所以依據面積進行排序,依據其他值也可以,獲取面積最大的輪廓。

contours = sorted(contours, key = cv.contourArea, reverse = True)[:3]

對輪廓進行簡單繪制,獲得下圖效果。

cv.drawContours(src,contours,-1,(0,0,255),2)

遍歷輪廓,計算輪廓近似

先看代碼:

# 遍歷輪廓
for c in contours:
	# 計算輪廓近似
	peri = cv.arcLength(c, True)
	approx = cv.approxPolyDP(c, 0.02 * peri, True)

一個新的函數 cv.arcLength,該函數的原型如下:

retval = cv2.arcLength(curve, closed)

該函數用于計算輪廓的周長。

下面的 cv.approxPolyDP 函數原型如下:

approxCurve = cv2.approxPolyDP(curve, epsilon, closed[, approxCurve])

函數參數如下:

  • curve:源圖像的某個輪廓;

  • epsilon:距離值,表示多邊形的輪廓接近實際輪廓的程度,值越小,越精確;

  • closed:輪廓是否閉合。

最重要的參數就是 epsilon 簡單記憶為:該值越小,得到的多邊形角點越多,輪廓越接近實際輪廓,該參數是一個準確度參數。

該函數返回值為輪廓近似多邊形的角點。

繪制輪廓

最后判斷,當上文返回的角點為 4 的時候,提取輪廓,代碼如下:

# 遍歷輪廓
for c in contours:
	# 計算輪廓近似
	peri = cv.arcLength(c, True)
	approx = cv.approxPolyDP(c, 0.02 * peri, True)

	# 當恰好是 4 個角點的時候,獲取輪廓。
	if len(approx) == 4:
		screen_cnt = approx
		break

# 結果顯示
cv.drawContours(src, [screen_cnt], -1, (0, 0, 255), 2)

更換圖片,進行再次輪廓檢測,注意修改輪廓近似部分代碼即可。

# 遍歷輪廓
for c in contours:
  # 計算輪廓近似

  approx = cv.approxPolyDP(c, 30, True)

  if len(approx) == 4:
    screen_cnt = approx
    break

上述就是小編為大家分享的怎么在Python中使用OpenCV標記圖像區域輪廓了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

上犹县| 祥云县| 马公市| 清涧县| 仁寿县| 二连浩特市| 蕉岭县| 赣榆县| 清镇市| 铁力市| 永靖县| 潮州市| 留坝县| 大埔县| 古交市| 通城县| 肥乡县| 普兰店市| 永城市| 文山县| 望奎县| 宜都市| 台中县| 文昌市| 电白县| 阳新县| 磐石市| 佛教| 庆元县| 盘锦市| 兴安盟| 广南县| 南平市| 河西区| 易门县| 漳平市| 施秉县| 富裕县| 曲周县| 綦江县| 蕉岭县|