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

Opencv圖像處理方法最全總結(jié)

 更新時(shí)間:2024年06月11日 11:56:38   作者:程序小旭  
這篇文章主要給大家介紹了關(guān)于Opencv圖像處理方法的相關(guān)資料,OpenCV是一個(gè)開源的計(jì)算機(jī)視覺庫,提供了很多圖像處理、計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)等方面的函數(shù)和工具,被廣泛應(yīng)用于各種計(jì)算機(jī)視覺領(lǐng)域的研究和應(yīng)用中,需要的朋友可以參考下

圖像閾值處理

圖像閾值的處理通過cv2.threshold函數(shù)來進(jìn)行處理,該函數(shù)的具體說明如下所示

ret, dst = cv2.threshold(src, thresh, maxval, type)

  • src: 輸入圖,只能輸入單通道圖像,通常來說為灰度圖

  • dst: 輸出圖

  • thresh: 閾值

  • maxval: 當(dāng)像素值超過了閾值(或者小于閾值,根據(jù)type來決定),所賦予的值

  • type:二值化操作的類型,包含以下5種類型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV

cv2.THRESH_BINARY 超過閾值部分取maxval(最大值),否則取0
cv2.THRESH_BINARY_INV THRESH_BINARY的反轉(zhuǎn)
cv2.THRESH_TRUNC 大于閾值部分設(shè)為閾值,否則不變
cv2.THRESH_TOZERO 大于閾值部分不改變,否則設(shè)為0
cv2.THRESH_TOZERO_INV THRESH_TOZERO的反轉(zhuǎn)

  • 讀取圖像信息并將其轉(zhuǎn)化為灰度圖
import cv2 #opencv讀取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
%matplotlib inline 
def showimg(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
img_dog = cv2.imread('./res/dog.jpg')
# 轉(zhuǎn)化為灰度圖
img_gray = cv2.cvtColor(img_dog,cv2.COLOR_BGR2GRAY)
img_gray.shape
showimg("dog",img_gray)

  • 測(cè)試圖像閾值的處理,并在行內(nèi)繪制經(jīng)過圖像閾值處理之后的圖像信息(彩色圖像進(jìn)行處理)
ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img_dog, thresh1, thresh2, thresh3, thresh4, thresh5]
# 繪制出所需的圖像信息
for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

圖像平滑處理

首先引出圖像平滑處理的概念 -> 讀入(給出)一張含有多個(gè)圖像噪音的圖片。對(duì)圖像進(jìn)行平滑處理可以簡(jiǎn)單的理解為使用濾波去除圖像中噪音的過程

  • 讀入并展示含有噪音的經(jīng)典圖像數(shù)據(jù)
img_n = cv2.imread('./res/lenaNoise.png')
showimg('noise',img_n)

濾波可以類比與卷積操作,對(duì)圖像中的像素值進(jìn)行處理
使用均值濾波對(duì)圖像進(jìn)行處理。

cv2.blur(img, (3, 3))

  • img輸入圖像
  • (3,3)(5,5)處理的區(qū)域大小
# 均值濾波
# 簡(jiǎn)單的平均卷積操作
blur = cv2.blur(img_n, (3, 3))

cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

從而可以看出明顯的平滑處理的樣式

# 方框?yàn)V波
# 基本和均值一樣,可以選擇歸一化(True進(jìn)行平均 False )
box = cv2.boxFilter(img_n,-1,(3,3), normalize=False)  

cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

其他使用較多的方式包括了均值濾波和高斯濾波等一些常規(guī)的方法

# 高斯濾波
# 高斯模糊的卷積核里的數(shù)值是滿足高斯分布,相當(dāng)于更重視中間的
aussian = cv2.GaussianBlur(img_n, (5, 5), 1)  

cv2.imshow('aussian', aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
#%%
# 中值濾波
# 相當(dāng)于用中值代替
median = cv2.medianBlur(img_n, 5)  # 中值濾波

cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

所有的平滑處理結(jié)果進(jìn)行展示

# 展示所有的
res = np.hstack((blur,aussian,median))
#print (res)
cv2.imshow('median vs average', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

圖像形態(tài)學(xué)操作

圖像的形態(tài)學(xué)操作大多處理的是黑白背景的圖片

圖像的腐蝕操作 :(即設(shè)置迭代的次數(shù)和操作的大?。?duì)白色的邊緣區(qū)域來進(jìn)行進(jìn)一步的處理。

dige = cv2.imread('./res/dige.png')

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

cv2.erode(dige,kernel,iterations = 2)

  • 圖像
  • 操作大小
  • 迭代次數(shù)
kernel = np.ones((3,3),np.uint8) 
erosion = cv2.erode(dige,kernel,iterations = 2)

cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

腐蝕操作的一個(gè)逆操作可以看作是一個(gè)膨脹操作。(使得白色的區(qū)域變大)

在執(zhí)行腐蝕完成之后白色的小區(qū)域雖然去掉了,但是線條的大小變小,因此需要使用膨脹操作

cv2.dilate(erosion,kernel,iterations = 1)

  • erosion經(jīng)過腐蝕操作之后的圖像。
kernel = np.ones((3,3),np.uint8) 
dige_dilate = cv2.dilate(erosion,kernel,iterations = 1)

cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()

完成膨脹操作進(jìn)行擴(kuò)充線條的粗細(xì)。

開運(yùn)算與閉運(yùn)算

開運(yùn)算(cv2.MORPH_OPEN):先腐蝕,再膨脹 閉運(yùn)算(cv2.MORPH_CLOSE):先膨脹,再腐蝕

本質(zhì)就是一個(gè)綜合進(jìn)行處理的過程信息。cv2.morphologyEx()

# 開:先腐蝕,再膨脹
img = cv2.imread('dige.png')

kernel = np.ones((5,5),np.uint8) 
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 閉:先膨脹,再腐蝕
img = cv2.imread('dige.png')

kernel = np.ones((5,5),np.uint8) 
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

梯度運(yùn)算

梯度(cv2.MORPH_GRADIENT)=膨脹-腐蝕:簡(jiǎn)單理解是梯度運(yùn)算是用來篩選圖片的邊界區(qū)域的。

  • 水平連接經(jīng)過膨脹和腐蝕的兩個(gè)區(qū)域。
    res = np.hstack((dilate,erosion))
# 梯度=膨脹-腐蝕
pie = cv2.imread('./res/pie.png')
kernel = np.ones((7,7),np.uint8) 
dilate = cv2.dilate(pie,kernel,iterations = 5)
erosion = cv2.erode(pie,kernel,iterations = 5)

res = np.hstack((dilate,erosion))

cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

  • 執(zhí)行梯度運(yùn)算來進(jìn)行篩選。
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)

cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

總結(jié) 

到此這篇關(guān)于Opencv圖像處理方法的文章就介紹到這了,更多相關(guān)Opencv圖像處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python使用技巧-查找文件?

    python使用技巧-查找文件?

    這篇文章主要分享的是python使用技巧查找文件,下面我們就來介紹針對(duì)python查找文件的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • opencv鎖定鼠標(biāo)定位的實(shí)現(xiàn)

    opencv鎖定鼠標(biāo)定位的實(shí)現(xiàn)

    本文主要介紹了opencv鎖定鼠標(biāo)定位的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python 制作糗事百科爬蟲實(shí)例

    Python 制作糗事百科爬蟲實(shí)例

    本文是結(jié)合前面的三篇關(guān)于python制作爬蟲的基礎(chǔ)文章,給大家分享的一份爬取糗事百科的小段子的源碼,有需要的小伙伴可以參考下
    2016-09-09
  • python 輸出所有大小寫字母的方法

    python 輸出所有大小寫字母的方法

    今天小編就為大家分享一篇python 輸出所有大小寫字母的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 10個(gè)Python自動(dòng)化辦公的腳本分享

    10個(gè)Python自動(dòng)化辦公的腳本分享

    在日常辦公中,我們常常會(huì)被繁瑣、重復(fù)的任務(wù)占據(jù)大量時(shí)間,本文為大家分享了10個(gè)實(shí)用的?Python?自動(dòng)化辦公案例及源碼,希望對(duì)大家有所幫助
    2025-02-02
  • python循環(huán)神經(jīng)網(wǎng)絡(luò)RNN函數(shù)tf.nn.dynamic_rnn使用

    python循環(huán)神經(jīng)網(wǎng)絡(luò)RNN函數(shù)tf.nn.dynamic_rnn使用

    這篇文章主要為大家介紹了python循環(huán)神經(jīng)網(wǎng)絡(luò)RNN的tf.nn.dynamic_rnn使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 解決NameError:name'pip'is not defined使用pip時(shí)報(bào)錯(cuò)問題

    解決NameError:name'pip'is not defined使用pip

    使用pip時(shí)遇到NameError:name ‘pip’ is not defined錯(cuò)誤通常是由于在Python環(huán)境內(nèi)直接嘗試運(yùn)行pip命令導(dǎo)致的,正確的做法是在Python外部的命令行中運(yùn)行pip命令,這個(gè)錯(cuò)誤提醒我們?cè)谑褂胮ip時(shí),應(yīng)確保在正確的環(huán)境中執(zhí)行相關(guān)命令
    2024-10-10
  • 使用selenium+chromedriver+xpath爬取動(dòng)態(tài)加載信息

    使用selenium+chromedriver+xpath爬取動(dòng)態(tài)加載信息

    這篇文章主要介紹了使用selenium+chromedriver+xpath爬取動(dòng)態(tài)加載信息
    2022-02-02
  • Python實(shí)現(xiàn)郵件發(fā)送功能的方法詳解

    Python實(shí)現(xiàn)郵件發(fā)送功能的方法詳解

    本文將學(xué)會(huì)各種類型的郵件發(fā)送方式,比如普通文本郵件、帶附件的郵件等等,如何通過程序發(fā)送郵件現(xiàn)在我們還不太了解,接下來就會(huì)為大家進(jìn)行詳細(xì)的介紹
    2022-05-05
  • 解決python中的冪函數(shù)、指數(shù)函數(shù)問題

    解決python中的冪函數(shù)、指數(shù)函數(shù)問題

    今天小編就為大家分享一篇解決python中的冪函數(shù)、指數(shù)函數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評(píng)論