婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python OpenCV 圖像區域輪廓標記(框選各種小紙條)

Python OpenCV 圖像區域輪廓標記(框選各種小紙條)

熱門標簽:南京crm外呼系統排名 云南地圖標注 鄭州智能外呼系統中心 北京外呼電銷機器人招商 賓館能在百度地圖標注嗎 汕頭電商外呼系統供應商 400電話 申請 條件 電銷機器人 金倫通信 crm電銷機器人

學在前面

上篇 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)

轉換成灰度圖,高斯模糊去噪,Canny 邊緣檢測,這些都是圖像處理的基本函數,使用方法已經在前文進行過相關學習。

運行上述代碼之后,獲取基本邊緣數據。

輪廓檢測

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

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 圖像區域輪廓標記(框選各種小紙條)的文章就介紹到這了,更多相關Python OpenCV區域輪廓標記內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python OpenCV高斯金字塔與拉普拉斯金字塔的實現
  • Python OpenCV 基于圖像邊緣提取的輪廓發現函數
  • Python opencv操作深入詳解
  • Python+Opencv實現數字識別的示例代碼
  • python中的opencv和PIL(pillow)轉化操作
  • python opencv 找出圖像中的最大輪廓并填充(生成mask)
  • python利用opencv實現顏色檢測
  • python 使用OpenCV進行簡單的人像分割與合成
  • Python基于opencv的簡單圖像輪廓形狀識別(全網最簡單最少代碼)
  • python基于OpenCV模板匹配識別圖片中的數字

標簽:昆明 文山 錫林郭勒盟 懷化 西寧 石家莊 浙江 梅州

巨人網絡通訊聲明:本文標題《Python OpenCV 圖像區域輪廓標記(框選各種小紙條)》,本文關鍵詞  Python,OpenCV,圖像,區域,輪廓,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python OpenCV 圖像區域輪廓標記(框選各種小紙條)》相關的同類信息!
  • 本頁收集關于Python OpenCV 圖像區域輪廓標記(框選各種小紙條)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 兴仁县| 宜州市| 武冈市| 乐亭县| 普宁市| 罗平县| 阳谷县| 兴宁市| 平度市| 大安市| 五寨县| 滨州市| 紫云| 彝良县| 永济市| 南陵县| 靖江市| 达日县| 介休市| 商都县| 如皋市| 牡丹江市| 自治县| 安顺市| 东兴市| 鹿泉市| 白山市| 桓仁| 那坡县| 崇阳县| 慈溪市| 墨竹工卡县| 亳州市| 曲麻莱县| 永新县| 耿马| 离岛区| 五原县| 黄骅市| 大庆市| 广宗县|