欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python OpenCV 圖像區(qū)域輪廓標(biāo)記(框選各種小紙條)

 更新時(shí)間:2021年03月12日 10:57:54   作者:夢(mèng)想橡皮擦  
這篇文章主要介紹了Python OpenCV 圖像區(qū)域輪廓標(biāo)記(框選各種小紙條),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

學(xué)在前面

上篇 OpenCV 博客原計(jì)劃完成一個(gè) 識(shí)別銀行卡號(hào) 的項(xiàng)目,但是寫的過程中發(fā)現(xiàn),技術(shù)儲(chǔ)備不足,我無法在下述圖片中,提取出卡號(hào)區(qū)域,也就無法進(jìn)行后續(xù)的識(shí)別了,再次意識(shí)到了自己技術(shù)還不達(dá)標(biāo),繼續(xù)學(xué)習(xí)。完不成,就實(shí)現(xiàn)其它學(xué)習(xí)項(xiàng)目。

Python OpenCV 圖像區(qū)域輪廓標(biāo)記,可用于框選各種小紙條

輪廓識(shí)別實(shí)戰(zhàn)

先看一下最終實(shí)現(xiàn)的效果,針對(duì)一張圖片(該圖片前景色和背景色差異較大),進(jìn)行輪廓標(biāo)記。

Python OpenCV 圖像區(qū)域輪廓標(biāo)記,可用于框選各種小紙條

圖片基本處理

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)

轉(zhuǎn)換成灰度圖,高斯模糊去噪,Canny 邊緣檢測(cè),這些都是圖像處理的基本函數(shù),使用方法已經(jīng)在前文進(jìn)行過相關(guān)學(xué)習(xí)。

運(yùn)行上述代碼之后,獲取基本邊緣數(shù)據(jù)。

Python OpenCV 圖像區(qū)域輪廓標(biāo)記,可用于框選各種小紙條

輪廓檢測(cè)

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

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

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

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

觀察上圖,可以發(fā)現(xiàn)最外側(cè)的邊緣面積是最大的,所以依據(jù)面積進(jìn)行排序,依據(jù)其他值也可以,獲取面積最大的輪廓。

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

對(duì)輪廓進(jìn)行簡(jiǎn)單繪制,獲得下圖效果。

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

Python OpenCV 圖像區(qū)域輪廓標(biāo)記,可用于框選各種小紙條

遍歷輪廓,計(jì)算輪廓近似

先看代碼:

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

一個(gè)新的函數(shù) cv.arcLength,該函數(shù)的原型如下:

retval = cv2.arcLength(curve, closed)

該函數(shù)用于計(jì)算輪廓的周長(zhǎng)。

下面的 cv.approxPolyDP 函數(shù)原型如下:

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

函數(shù)參數(shù)如下:

  • curve:源圖像的某個(gè)輪廓;
  • epsilon:距離值,表示多邊形的輪廓接近實(shí)際輪廓的程度,值越小,越精確;
  • closed:輪廓是否閉合。

最重要的參數(shù)就是 epsilon 簡(jiǎn)單記憶為:該值越小,得到的多邊形角點(diǎn)越多,輪廓越接近實(shí)際輪廓,該參數(shù)是一個(gè)準(zhǔn)確度參數(shù)。

該函數(shù)返回值為輪廓近似多邊形的角點(diǎn)。

繪制輪廓

最后判斷,當(dāng)上文返回的角點(diǎn)為 4 的時(shí)候,提取輪廓,代碼如下:

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

	# 當(dāng)恰好是 4 個(gè)角點(diǎn)的時(shí)候,獲取輪廓。
	if len(approx) == 4:
		screen_cnt = approx
		break

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

更換圖片,進(jìn)行再次輪廓檢測(cè),注意修改輪廓近似部分代碼即可。

# 遍歷輪廓
for c in contours:
  # 計(jì)算輪廓近似

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

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

Python OpenCV 圖像區(qū)域輪廓標(biāo)記,可用于框選各種小紙條

到此這篇關(guān)于Python OpenCV 圖像區(qū)域輪廓標(biāo)記(框選各種小紙條)的文章就介紹到這了,更多相關(guān)Python OpenCV區(qū)域輪廓標(biāo)記內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • jupyter notebook 寫代碼自動(dòng)補(bǔ)全的實(shí)現(xiàn)

    jupyter notebook 寫代碼自動(dòng)補(bǔ)全的實(shí)現(xiàn)

    這篇文章主要介紹了jupyter notebook 寫代碼自動(dòng)補(bǔ)全的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python使用多線程查詢數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例

    python使用多線程查詢數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例

    這篇文章主要介紹了python使用多線程查詢數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 徹底搞懂python 迭代器和生成器

    徹底搞懂python 迭代器和生成器

    這篇文章主要介紹了python 迭代器和生成器的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • selenium python瀏覽器多窗口處理代碼示例

    selenium python瀏覽器多窗口處理代碼示例

    這篇文章主要介紹了selenium python瀏覽器多窗口處理代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Pytorch怎樣保存訓(xùn)練好的模型

    Pytorch怎樣保存訓(xùn)練好的模型

    這篇文章主要介紹了Pytorch怎樣保存訓(xùn)練好的模型問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Matplotlib實(shí)戰(zhàn)之直方圖繪制詳解

    Matplotlib實(shí)戰(zhàn)之直方圖繪制詳解

    直方圖,又稱質(zhì)量分布圖,用于表示數(shù)據(jù)的分布情況,是一種常見的統(tǒng)計(jì)圖表,這篇文章主要為大家詳細(xì)介紹了如何使用Matplotlib繪制直方圖,需要的可以參考下
    2023-08-08
  • 解決Python一行輸出不顯示的問題

    解決Python一行輸出不顯示的問題

    今天小編就為大家分享一篇解決Python一行輸出不顯示的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python使用requests庫(kù)進(jìn)行請(qǐng)求重試

    Python使用requests庫(kù)進(jìn)行請(qǐng)求重試

    在進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),由于網(wǎng)絡(luò)波動(dòng)、服務(wù)器繁忙等原因,可能會(huì)出現(xiàn)請(qǐng)求失敗的情況,為了提高請(qǐng)求的成功率,我們可以使用請(qǐng)求重試機(jī)制,本文就來講講如何在 Python 中使用 requests 庫(kù)進(jìn)行請(qǐng)求重試吧
    2023-06-06
  • Flask Paginate實(shí)現(xiàn)表格分頁(yè)的使用示例

    Flask Paginate實(shí)現(xiàn)表格分頁(yè)的使用示例

    flask_paginate是Flask框架的一個(gè)分頁(yè)擴(kuò)展,用于處理分頁(yè)相關(guān)的功能,本文就來介紹一下Flask Paginate實(shí)現(xiàn)表格分頁(yè)的使用示例,感興趣的可以了解一下
    2023-11-11
  • python爬蟲把url鏈接編碼成gbk2312格式過程解析

    python爬蟲把url鏈接編碼成gbk2312格式過程解析

    這篇文章主要介紹了python爬蟲把url鏈接編碼成gbk2312格式過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論