Python?OpenCV實(shí)現(xiàn)圖片預(yù)處理的方法詳解
一、圖片預(yù)處理
1.1 邊界填充(padding)
方法 : cv2.copyMakeBorder
BORDER_REPLICATE:復(fù)制法,也就是復(fù)制最邊緣像素。
BORDER_REFLECT:反射法,對(duì)感興趣的圖像中的像素在兩邊進(jìn)行復(fù)制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最邊緣像素為軸,對(duì)稱,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包裝法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常數(shù)值填充。
import cv2 import matplotlib.pyplot as plt img = cv2.imread('cat.png') img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) top_size, bottom_size, left_size, right_size = (50, 50, 50, 50) replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE) reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT) reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101) wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP) constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT, value=0) plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL') plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE') plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT') plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101') plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP') plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT') plt.show()
其效果如下:
cat.png原圖下載:
dog.png原圖下載:
1.2 融合圖片(mixup)
方法 : cv2.addWeighted(src1, alpha, src2, beta, gamma)
- src1, src2:需要融合相加的兩副大小和通道數(shù)相等的圖像
- alpha:src1的權(quán)重
- beta:src2的權(quán)重
- gamma:gamma修正系數(shù),不需要修正設(shè)置為0
import cv2 import matplotlib.pyplot as plt img_cat = cv2.imread('cat.png') img_cat = cv2.cvtColor(img_cat, cv2.COLOR_RGB2BGR) cat_shape = [img_cat.shape[1], img_cat.shape[0]] # 因?yàn)閏v2讀取通道數(shù)是最后一位 img_dog = cv2.imread('dog.png') img_dog = cv2.cvtColor(img_dog, cv2.COLOR_RGB2BGR) img_dog = cv2.resize(img_dog, cat_shape) mixup = cv2.addWeighted(img_cat, 0.55, img_dog, 0.45, 0) plt.imshow(mixup) plt.show()
其效果如下:
1.3 圖像閾值
ret, dst = cv2.threshold(src, thresh, maxval, type)
- src: 輸入圖,只能輸入單通道圖像,通常來(lái)說(shuō)為灰度圖
- dst: 輸出圖
- thresh: 閾值
- maxval: 當(dāng)像素值超過(guò)了閾值(或者小于閾值,根據(jù)type來(lái)決定),所賦予的值
- type:二值化操作的類型,包含以下5種類型:
- cv2.THRESH_BINARY 超過(guò)閾值部分取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)
其效果如下:
二、濾波器
2.1 均值濾波器
import cv2 import numpy as np img = cv2.imread('lenaNoise.png') cv2.imshow('blur', img) cv2.waitKey(0) cv2.destroyAllWindows() # 均值濾波 # 簡(jiǎn)單的平均卷積操作 blur = cv2.blur(img, (3, 3))
lenaNoise.png原圖展示:
白色為圖片,黃色區(qū)域?yàn)闉V波器窗口:
2.2 方框?yàn)V波器
# 方框?yàn)V波 # 基本和均值一樣,可以選擇歸一化 box = cv2.boxFilter(img, -1, (3, 3), normalize=True)
總結(jié): 均值濾波器是取濾波器中的平均值,然后繼續(xù)滑動(dòng)下一個(gè)窗口。
2.3 高斯濾波器
# 高斯濾波 # 高斯模糊的卷積核里的數(shù)值是滿足高斯分布,相當(dāng)于更重視中間的 aussian = cv2.GaussianBlur(img, (5, 5), 1)
總結(jié): 高斯濾波器是濾波器窗口中離中心值近的權(quán)值大,用高斯分布增加一個(gè)權(quán)重,然后繼續(xù)滑動(dòng)下一個(gè)窗口。
2.4 中值濾波
# 中值濾波 # 相當(dāng)于用中值代替 median = cv2.medianBlur(img, 5) # 中值濾波
總結(jié): 中值濾波器是濾波器窗口中所有數(shù)字的中間值,如黃色框中9個(gè)數(shù)的中間值為113,然后繼續(xù)滑動(dòng)下一個(gè)窗口。
2.5 所有濾波器按照上述順序輸出
# 展示所有的 res = np.hstack((blur, aussian, median)) # print (res) cv2.imshow('median vs average', res) cv2.waitKey(0) cv2.destroyAllWindows()
總結(jié):中值濾波器的圖效果最好,可以解決一些椒鹽噪聲。
以上就是Python OpenCV實(shí)現(xiàn)圖片預(yù)處理的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Python OpenCV圖片預(yù)處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文教你如何用Python輕輕松松操作Excel,Word,CSV
數(shù)據(jù)處理是 Python 的一大應(yīng)用場(chǎng)景,而 Excel 又是當(dāng)前最流行的數(shù)據(jù)處理軟件。本文將為大家詳細(xì)介紹一下如何用Python輕輕松松操作Excel、Word、CSV,需要的可以參考一下2022-02-02Python實(shí)現(xiàn)的質(zhì)因式分解算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的質(zhì)因式分解算法,涉及Python數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-05-05Python實(shí)現(xiàn)的多叉樹(shù)尋找最短路徑算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的多叉樹(shù)尋找最短路徑算法,結(jié)合實(shí)例形式分析了Python使用深度優(yōu)先查找獲取多叉樹(shù)最短路徑相關(guān)操作技巧,需要的朋友可以參考下2018-07-07PyTorch 遷移學(xué)習(xí)實(shí)戰(zhàn)
本文主要介紹了PyTorch 遷移學(xué)習(xí)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-012020年10款優(yōu)秀的Python第三方庫(kù),看看有你中意的嗎?
2020已經(jīng)過(guò)去,在過(guò)去的一年里,又有非常多優(yōu)秀的Python庫(kù)涌現(xiàn)出來(lái)。相對(duì)于numpy、TensorFlow、pandas這些已經(jīng)經(jīng)過(guò)多年維護(hù)、迭代,對(duì)于大多數(shù)Python開(kāi)發(fā)者耳熟能詳?shù)膸?kù)不同。2021-01-01Python數(shù)據(jù)結(jié)構(gòu)之圖的應(yīng)用示例
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)之圖的應(yīng)用,結(jié)合實(shí)例形式分析了Python數(shù)據(jù)結(jié)構(gòu)中圖的定義與遍歷算法相關(guān)操作技巧,需要的朋友可以參考下2018-05-05Python使用urlretrieve實(shí)現(xiàn)直接遠(yuǎn)程下載圖片的示例代碼
這篇文章主要介紹了Python使用urlretrieve實(shí)現(xiàn)直接遠(yuǎn)程下載圖片的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Python局部函數(shù)及用法詳解(含nonlocal關(guān)鍵字)
局部函數(shù)有哪些特征,在使用時(shí)需要注意什么呢?接下來(lái)就給讀者詳細(xì)介紹?Python?局部函數(shù)的用法,對(duì)Python局部函數(shù)相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2022-12-12Linux安裝Pytorch1.8GPU(CUDA11.1)的實(shí)現(xiàn)
這篇文章主要介紹了Linux安裝Pytorch1.8GPU(CUDA11.1)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Python數(shù)據(jù)類型最全知識(shí)總結(jié)
學(xué)習(xí)一門語(yǔ)言,往往都是從Hello World開(kāi)始. 但是筆者認(rèn)為,在一個(gè)黑框框中輸出一個(gè)“你好,世界”并沒(méi)有什么了不起,要看透事物的本質(zhì),熟悉一門語(yǔ)言,就要了解其底層,就是我們常常說(shuō)的基礎(chǔ),本篇從python中的數(shù)據(jù)類型開(kāi)始,需要的朋友可以參考下2021-05-05