深入學(xué)習(xí)Python+Opencv常用四種圖像處理操作
opencv圖像處理(深度學(xué)習(xí)中常用的)
改變色彩空間: cv.cvtColor()
cv.cvtColor(img, flag)
- img:原圖像
- flag:要改變的類型
常用的flag有:cv.COLOR_BGR2GRAY (BGR->GRAY)、cv.COLOR_BGR2HSV
img = cv.imread(r'E:\0_postgraduate\test.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('img', img)
cv.imshow('img_gray', gray)
k = cv.waitKey(0)
if k & 0xFF == ord('q'):
cv.destroyAllWindows()

我們可以看看flag都有哪些:
flags = [i for i in dir(cv) if i.startswith('COLOR_')]
print( flags )
改變圖像大?。篶v.resize()
cv.resize(img, (width, height))
- img:原始圖像
- width:縮放后圖像的寬度
- height:縮放后圖像的高度
img = cv.imread(r'E:\0_postgraduate\test.jpg')
img_resize = cv.resize(img, (500, 600))
cv.imshow('img shape: {} x {}'.format(img.shape[1], img.shape[0]), img)
cv.imshow('img_resize shape: {} x {}'.format(img_resize.shape[1], img_resize.shape[0]), img_resize)
k = cv.waitKey(0)
if k & 0xFF == ord('q'):
cv.destroyAllWindows()

比如某些網(wǎng)絡(luò)要求輸入的圖像必須是固定大小的:256 x 256這么大的,這時就可以用cv.resize()對大小不一的圖像進(jìn)行縮放。
二維卷積操作
cv.filter2D()+軌跡條動態(tài)控制圖像參數(shù):cv.createTrackbar()、cv.getTrackbarPos()
卷積操作是什么這里就不再介紹了。
cv.filter2D(img, -1, kernel)
- img:原始圖像
- -1:這個參數(shù)應(yīng)該是輸出圖像,沒什么用,填-1就行
- kernel:卷積核,一個二維數(shù)組
而至于cv.createTrackbar()、cv.getTrackbarPos(),這兩個函數(shù)可以很方便的動態(tài)調(diào)節(jié)圖像的參數(shù),很直觀地看到調(diào)節(jié)的效果:
cv.createTrackbar()
第一個參數(shù)是軌跡欄名稱
第二個參數(shù)是它所屬的窗口名稱,
第三個參數(shù)是默認(rèn)值,
第四個參數(shù)是最大值,
第五個參數(shù)是執(zhí)行的回調(diào)函數(shù)每次軌跡欄值都會發(fā)生變化,即每次滑動軌跡條時都會調(diào)用該參數(shù)。
cv.getTrackbarPos()
第一個參數(shù)是滑動條名字,
第二個時所在窗口,
返回值是滑動條的數(shù)值
# cv.createTrackbar() 和 cv.getTrackbarPos()測試
def nothing(*arg):
pass
img = cv.imread(r'E:\0_postgraduate\test.jpg')
img_original = img
cv.namedWindow('image_test')
cv.createTrackbar('kernel_width', 'image_test', 1, 30, nothing)
cv.createTrackbar('kernel_height', 'image_test', 1, 30, nothing)
while 1:
w = cv.getTrackbarPos('kernel_width', 'image_test')
h = cv.getTrackbarPos('kernel_height', 'image_test')
print('w: {} h: {}'.format(w, h))
if(w!=0 and h!=0):
kernel = np.ones((w, h), np.float32)/(w*h)
img = cv.filter2D(img_original, -1, kernel)
cv.imshow('image_test', img)
else:
cv.imshow('image_test', img_original)
k = cv.waitKey(5)
if k & 0xFF == ord('q'):
break
cv.destroyAllWindows()



常用模糊
常用的模糊有平均化模糊:cv.blur()和高斯模糊:cv.GaussianBlur()
(1) cv.blur()
平均化模糊cv.blur()就是讓原始圖像與一個全1的卷積核做卷積,然后將得到的值除以卷積核中像素的總個數(shù),這么說太繞了,直接上圖:
比如我選的卷積核為3x3大小,則原始圖像要與如下的卷積核做卷積:

cv.blur(img, (weight, height))
- img:原始圖像
- weight:卷積核的寬
- height:卷積核的長
(2) cv.GaussianBlur()
高斯模糊是在平均化模糊基礎(chǔ)上的改進(jìn),考慮了距離對于中心像素的影響:與中心像素距離越近的像素?fù)碛性礁叩臋?quán)重,其實超級簡單。高斯模糊的原理可以參考:python實現(xiàn)高斯模糊及原理詳解
cv.GaussianBlur(img, (weight, height), sigmaX, sigmaY)
- img:原始圖像
- weight:卷積核的寬
- height:卷積核的長
- sigmaX:二維高斯函數(shù)x的偏差
- sigmaY:二維高斯函數(shù)y的偏差
注意:
核的寬度和高度,應(yīng)該是正數(shù)和奇數(shù)。我們還應(yīng)該指定X和Y方向的標(biāo)準(zhǔn)偏差,分別為sigmaX和sigmaY。如果只指定sigmaX,sigmaY將被視為與sigmaX相同。如果兩者都是零,則根據(jù)核大小計算。高斯模糊對去除圖像中的高斯噪聲非常有效。
img = cv.imread(r'E:\0_postgraduate\test.jpg')
img_blur = cv.blur(img, (5,5))
img_gaussian = cv.GaussianBlur(img, (5,5), 0)
cv.imshow('image_blur', img_blur)
cv.imshow('image_gaussian', img_gaussian)
k = cv.waitKey(0)
if k & 0xFF == ord('q'):
cv.destroyAllWindows()

到此這篇關(guān)于深入學(xué)習(xí)Python+Opencv常用四種圖像處理操作的文章就介紹到這了,更多相關(guān)Python Opencv 圖像處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中執(zhí)行shell命令的幾個方法小結(jié)
這篇文章主要介紹了python中執(zhí)行shell命令的幾個方法,本文一共給出3種方法實現(xiàn)執(zhí)行shell命令,需要的朋友可以參考下2014-09-09
Python3實現(xiàn)的簡單工資管理系統(tǒng)示例
這篇文章主要介紹了Python3實現(xiàn)的簡單工資管理系統(tǒng),涉及Python文件讀寫、數(shù)據(jù)遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
Python爬蟲:Request Payload和Form Data的簡單區(qū)別說明
這篇文章主要介紹了Python爬蟲:Request Payload和Form Data的簡單區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python PyQt5實戰(zhàn)項目之網(wǎng)速監(jiān)控器的實現(xiàn)
PyQt5以一套Python模塊的形式來實現(xiàn)功能。它包含了超過620個類,600個方法和函數(shù)。它是一個多平臺的工具套件,它可以運行在所有的主流操作系統(tǒng)中,包含Unix,Windows和Mac OS。PyQt5采用雙重許可模式。開發(fā)者可以在GPL和社區(qū)授權(quán)之間選擇2021-11-11
Python中的正則表達(dá)式與JSON數(shù)據(jù)交換格式
正則表達(dá)式 是一個特殊的字符序列,一個字符串是否與我們所設(shè)定的這樣的字符序列,相匹配快速檢索文本、實現(xiàn)替換文本的操作。這篇文章主要介紹了Python中的正則表達(dá)式與JSON ,需要的朋友可以參考下2019-07-07
Python matplotlib修改默認(rèn)字體的操作
這篇文章主要介紹了Python matplotlib修改默認(rèn)字體的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
python使用pandas處理大數(shù)據(jù)節(jié)省內(nèi)存技巧(推薦)
這篇文章主要介紹了python使用pandas處理大數(shù)據(jù)節(jié)省內(nèi)存技巧,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

