亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python Opencv輪廓常用操作代碼實例解析

 更新時間:2020年09月01日 08:34:20   作者:五月的白色鈴蘭  
這篇文章主要介紹了Python Opencv輪廓常用操作代碼實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

1.顏色空間轉(zhuǎn)換

使用cv2.cvtColor(input_image ,flag),flag為轉(zhuǎn)換類型

常用的轉(zhuǎn)換類型有:

  • BGR和灰度圖的轉(zhuǎn)換使用 cv2.COLOR_BGR2GRAY
  • BGR和HSV的轉(zhuǎn)換使用 cv2.COLOR_BGR2HSV

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

2.二值化

  • ret, dst = cv2.threshold(src, thresh, maxval, type)
  • src:表示的是圖片源(灰度圖)
  • thresh:表示的是閾值(起始值)
  • maxval:表示的是最大值
  • type:表示的是這里劃分的時候使用的是什么類型的算法,常用值為0(cv2.THRESH_BINARY)

返回值

ret:指定的thresh

dst: 目標(biāo)圖像

ret, dst = cv2.threshold(img_gray, 200, 255, cv2.THRESH_BINARY)

3.查找并繪制輪廓

3.1 cv2.findContours(image, mode, method[, offset])

概述:

尋找一個二值圖像的輪廓。注意黑色表示背景,白色表示物體,即在黑色背景里尋找白色物體的輪廓

參數(shù):

  • image: 8位單通道圖像。非零像素值視為1,所以圖像視作二值圖像
  • mode: 輪廓檢索的方式
    • cv2.RETR_EXTERNAL: 只檢索外部輪廓
    • cv2.RETR_LIST: 檢測所有輪廓且不建立層次結(jié)構(gòu)
    • cv2.RETR_CCOMP: 檢測所有輪廓,建立兩級層次結(jié)構(gòu)。上面的一層為外邊界,里面的一層為內(nèi)孔的邊界信息。如果內(nèi)孔內(nèi)還有一個連通物體,這個物體的邊界也在頂層。
    • cv2.RETR_TREE: 檢測所有輪廓,建立完整的層次結(jié)構(gòu)
  • method: 輪廓近似的方法
    • cv2.CHAIN_APPROX_NONE: 存儲所有的輪廓點(diǎn)
    • cv2.CHAIN_APPROX_SIMPLE: 壓縮水平,垂直和對角線段,只留下端點(diǎn)。 例如矩形輪廓可以用4個點(diǎn)編碼
    • cv2.CHAIN_APPROX_TC89_L1,cv2.CHAIN_APPROX_TC89_KCOS:使用Teh-Chini chain近似算法
  • offset:(可選參數(shù))輪廓點(diǎn)的偏移量,格式為tuple,如(-10,10)表示輪廓點(diǎn)沿X負(fù)方向偏移10個像素點(diǎn),沿Y正方向偏移10個像素點(diǎn)

返回值:

  • contours: 輪廓點(diǎn)。列表格式,每一個元素為一個3維數(shù)組(其形狀為(n,1,2),其中n表示輪廓點(diǎn)個數(shù),2表示像素點(diǎn)坐標(biāo)),表示一個輪廓
  • hierarchy: 輪廓間的層次關(guān)系,為三維數(shù)組,形狀為(1,n,4),其中n表示輪廓總個數(shù),4指的是用4個數(shù)表示各輪廓間的相互關(guān)系。第一個數(shù)表示同級輪廓的下一個輪廓編號,第二個數(shù)表示同級輪廓的上一個輪廓的編號,第三個數(shù)表示該輪廓下一級輪廓的編號,第四個數(shù)表示該輪廓的上一級輪廓的編號

補(bǔ)充: 若想得到輪廓點(diǎn)的集合的列表,可使用

cnt = np.squeeze(contours[0])

3.2 cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]])

參數(shù):

  • image: 需要繪制輪廓的目標(biāo)圖像,注意會改變原圖
  • contours: 輪廓點(diǎn),上述函數(shù)cv2.findContours()的第一個返回值
  • contourIdx: 輪廓的索引,表示繪制第幾個輪廓,-1表示繪制所有的輪廓
  • color: 繪制輪廓的顏色
  • thickness:(可選參數(shù))輪廓線的寬度,-1表示填充
  • lineType:(可選參數(shù))輪廓線型,包括cv2.LINE_4,cv2.LINE_8(默認(rèn)),cv2.LINE_AA,分別表示4鄰域線,8領(lǐng)域線,抗鋸齒線(可以更好地顯示曲線)
  • hierarchy:(可選參數(shù))層級結(jié)構(gòu),上述函數(shù)cv2.findContours()的第二個返回值,配合maxLevel參數(shù)使用
  • maxLevel:(可選參數(shù))等于0表示只繪制指定的輪廓,等于1表示繪制指定輪廓及其下一級子輪廓,等于2表示繪制指定輪廓及其所有子輪廓
  • offset:(可選參數(shù))輪廓點(diǎn)的偏移量

import cv2
img = cv2.imread('D:/2.jpg',1)

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, dst = cv2.threshold(img_gray, 200, 255, cv2.THRESH_BINARY)

contours,hierarchy = cv2.findContours(dst, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(img, contours, -1, (0, 255, 0), 3)

cv2.imshow('img',img)
cv2.waitKey(0)

4.點(diǎn)與輪廓位置關(guān)系

此功能可查找圖像中的點(diǎn)與輪廓之間的最短距離。當(dāng)點(diǎn)在輪廓外時返回負(fù)值,當(dāng)點(diǎn)在內(nèi)部時返回正值,如果點(diǎn)在輪廓上則返回零

dist = cv2.pointPolygonTest(cnt, (100, 100), True)

檢查(100,100)與輪廓(cnt)的距離

在函數(shù)中,第二個參數(shù)需要tuple類型;第三個參數(shù)是measureDist。 如果為True,則查找距離. 如果為False,則查找該點(diǎn)是在內(nèi)部還是外部或在輪廓上(它分別返回+1,-1,0)

如果不需要到距離,請確保第三個參數(shù)為False,因為這是一個耗時的過程。因此,將其設(shè)為False可提供2-3倍的加速

5.直線擬合fitline函數(shù)

output = cv2.fitLine(InputArray points, distType, param, reps, aeps)

參數(shù):

  • InputArray Points: 待擬合的直線的集合,必須是矩陣形式(如numpy.array)
  • distType: 距離類型。fitline為距離最小化函數(shù),擬合直線時,要使輸入點(diǎn)到擬合直線的距離和最小化。這里的距離的類型有以下幾種:
    • cv2.DIST_USER : User defined distance
    • cv2.DIST_L1: distance = |x1-x2| + |y1-y2|
    • cv2.DIST_L2: 歐式距離,此時與最小二乘法相同
    • cv2.DIST_C: distance = max(|x1-x2|,|y1-y2|)
    • cv2.DIST_L12: L1-L2 metric: distance = 2(sqrt(1+x*x/2) - 1))
    • cv2.DIST_FAIR
    • cv2.DIST_WELSCH
    • cv2.DIST_HUBER
  • param: 距離參數(shù),跟所選的距離類型有關(guān),值可以設(shè)置為0
  • reps,aeps: 第5/6個參數(shù)用于表示擬合直線所需要的徑向和角度精度,通常情況下兩個值均被設(shè)定為1e-2

返回值:

output:對于二維直線,輸出output為4維,前兩維代表擬合出的直線的方向,后兩位代表直線上的一點(diǎn)。(即通常說的點(diǎn)斜式直線)

loc = np.array(loc)
output = cv2.fitLine(loc, cv2.DIST_L2, 0, 0.01, 0.01)
k = output[1] / output[0]
b = output[3] - k * output[2]#k[key]報錯?

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于django和dropzone.js實現(xiàn)上傳文件

    基于django和dropzone.js實現(xiàn)上傳文件

    這篇文章主要介紹了基于django和dropzone.js實現(xiàn)上傳文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • python實現(xiàn)圖片九宮格分割

    python實現(xiàn)圖片九宮格分割

    一張圖片分成的九宮圖,大家知道是怎么做到嗎?這篇文章就為大家詳細(xì)介紹了python實現(xiàn)圖片九宮格分割功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 詳解Python3.8+PyQt5+pyqt5-tools+Pycharm配置詳細(xì)教程

    詳解Python3.8+PyQt5+pyqt5-tools+Pycharm配置詳細(xì)教程

    這篇文章主要介紹了Python3.8+PyQt5+pyqt5-tools+Pycharm配置詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-11-11
  • Python3 + Appium + 安卓模擬器實現(xiàn)APP自動化測試并生成測試報告

    Python3 + Appium + 安卓模擬器實現(xiàn)APP自動化測試并生成測試報告

    這篇文章主要介紹了Python3 + Appium + 安卓模擬器實現(xiàn)APP自動化測試并生成測試報告,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Python如何將裝飾器定義為類

    Python如何將裝飾器定義為類

    這篇文章主要介紹了Python如何將裝飾器定義為類,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Jupyter?notebook運(yùn)行后打不開網(wǎng)頁的問題解決

    Jupyter?notebook運(yùn)行后打不開網(wǎng)頁的問題解決

    本文主要介紹了Jupyter?notebook運(yùn)行后打不開網(wǎng)頁的問題解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python實現(xiàn)的概率分布運(yùn)算操作示例

    Python實現(xiàn)的概率分布運(yùn)算操作示例

    這篇文章主要介紹了Python實現(xiàn)的概率分布運(yùn)算操作,涉及Python概率運(yùn)算與圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python庫安裝速度過慢解決方案

    Python庫安裝速度過慢解決方案

    這篇文章主要介紹了Python庫安裝速度過慢解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 淺析Python函數(shù)式編程

    淺析Python函數(shù)式編程

    在本篇文章中我們給大家分享了關(guān)于Python函數(shù)式編程的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友參考下。
    2018-10-10
  • 基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的古詩生成器

    基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的古詩生成器

    這篇文章主要為大家詳細(xì)介紹了基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的古詩生成器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論