「python opencv視覺零基礎」十、圖片效果毛玻璃

2021-01-13 1bit愛學習

一、學習目標

了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄

「python opencv 計算機視覺零基礎實戰」 第一節

「python opencv視覺入門到實戰」二、格式與攝像頭

「python opencv 視覺入門到實戰」 三、圖像編輯

「python opencv視覺入門到實戰」 第四節色彩空間

「python opencv視覺入門到實戰」 五、對象追蹤

「python opencv視覺零基礎到實戰」 六、圖像運算

「python opencv視覺零基礎實戰」 七邏輯運算應用

「python opencv視覺零到實戰」 八、圖片選區操作

「python opencv計算機視覺零基礎到實戰」 九模糊

如有錯誤歡迎指出~

二、了解模糊與美顏

2.1 使用高斯模糊降噪

由於很多小夥伴反應拋開原理或理論講解使用用法對於初學者來說會很舒服,從本節開始將會以比較簡單的方式進行講解相關API的應用。

首先我們有一張圖:

這張圖存在很多的噪點,那如何對該圖片進行降噪呢?學過前幾節的同學可能對降噪還是挺了解的。可能有些同學會說均值模糊和中值模糊。那我們先試試中值模糊:首先獲取圖片:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\111.png')dst=cv2.medianBlur(img,5)隨後進行中值模糊,並等待:

cv2.imshow("img", dst)cv2.waitKey (0)cv2.destroyAllWindows()結果如下:

從結果中可以得知,確實降噪的效果不錯,但是有一定的糊。現在我們再試試均值模糊。把中值模糊代碼改為:

dst=cv2.blur(img,(2,24))結果如下:

感覺更糊了,現在我們用我們高斯模糊試試水。高斯模糊使用API GaussianBlur,高斯模糊使用加權平均法對該半徑、範圍進行模糊。GaussianBlur方法原型如下:

cv2.GaussianBlur( SRC,ksize,sigmaX )我們在當前代碼中使用中可以按如下參數傳遞:

dst=cv2.GaussianBlur(img,(5,5),0) 其中img是要進行模糊的圖像,(5,5)是高斯核的大小,一般核大小都是奇數,最後一個為標準差,我們直接取0即可。若我(5,5)寫成(1,1)則表示不對原始圖像做操作。核越大圖像的模糊程度越大。適當取合適值可以使圖片模糊度不至於過糊。如果需要進行過濾圖像的大小相等時,那麼一般(5,5)的兩個值都是一樣,其實可以看做一個比例大小。我們添加原圖顯示與高斯模糊後的效果進行對比,完整代碼如下:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\111.png')dst=cv2.GaussianBlur(img,(5,5),0) cv2.namedWindow("Image",cv2.WINDOW_NORMAL)cv2.imshow("Image", img)cv2.imshow("Gaussian", dst)cv2.waitKey (0)cv2.destroyAllWindows()結果如下:

從圖片上來看高斯模糊對於整個輪廓的改變效果還是挺小的。其實高斯模糊對於我們來說應該是挺熟悉的,高斯模糊在一些圖片處理軟體上會用來對圖片增加毛玻璃效果。這時我們只需要將核大小置零,隨後更改方差值,這時就會出現毛玻璃效果。代碼如下:

dst=cv2.GaussianBlur(img,(0,0),20)

2.2 自己編寫噪點圖片

其實2.1中的噪點圖片是我自己編輯而成,那自己如何編寫類似的噪點圖片呢?很簡單只需要遍歷圖片大小即可。遍歷圖片大小對像素點進行隨機值的增加。如何遍歷圖片?只需要獲取圖片的寬高,對圖片進行遍歷即可。首先我們讀取圖片後對圖片進行寬高獲取:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\111.png')h,w,c=img.shape隨後遍歷每個像素點:

for row in range(h): for col in range(w): b=img[row,col,0] g=img[row,col,1] r=img[row,col,2]以上外層循環中遍歷高元素,隨後內層循環遍歷每個高元素的寬度元素;在寬度元素中獲取3個通道的值。有些小夥伴可能會說,為什麼獲取3個通道的值不使用循環?那是因為若使用循環會導致複雜度增加,會讓程序運行得更慢,所以為了減少複雜度,在這裡我使用了較為「笨」的方法直接讀取3個通道的值。隨後隨意生成一個3位隨機數,對該圖片的像素點進行增加:

srand=np.random.normal(0,30,3)img[row,col,0]=b+srand[0]img[row,col,1]=g+srand[1]img[row,col,2]=r+srand[2]結果如下:

咦?那為什麼變成這個樣子了?先別急,我們直接使用高斯模糊進行降噪吧:

dst=cv2.GaussianBlur(img,(5,5),0)結果如下:

咦?感覺降噪效果還不錯,這個時候我們就應該明白,「高斯模糊使用加權平均法對該半徑、範圍進行模糊」,我們可以很清楚的從結果圖中看見噪聲在該色值周圍得到了一定的「還原」。

好了,我們現在來探究為什麼這個圖編輯了隨機值後有的會白白的。那是因為我們沒有做「溢出」計算;我們在計算值的增減時應該考慮該值是否超過了255又或者是否小於了0,若小於0則置0,若大於255則等於255。因為如果我們加上一個值,小於0,那麼表示這個值本身偏暗,直接置0所偏向並沒有改變;若大於255則表示偏亮,直接等於255不會改變顏色的偏向,所以這樣做是沒問題的,極大限度的保留了原圖的基本樣貌。那麼此時的代碼的完整代碼如下:

import cv2import numpy as npimg = cv2.imread(r'C:\Users\mx\Desktop\111.png')h,w,c=img.shapefor row in range(h): for col in range(w): srand=np.random.normal(0,30,3) b=img[row,col,0] g=img[row,col,1] r=img[row,col,2] if b+srand[0]>255: img[row,col,0]=255 elif b+srand[0]<0: img[row,col,0]=0 else: img[row,col,0]=b+srand[0] if g+srand[1]>255: img[row,col,1]=255 elif g+srand[1]<0: img[row,col,1]=0 else: img[row,col,1]=g+srand[1] if r+srand[2]>255: img[row,col,2]=255 elif r+srand[2]<0: img[row,col,2]=0 else: img[row,col,2]=r+srand[2]#dst=cv2.blur(img,(2,24))dst=cv2.GaussianBlur(img,(0,0),20) cv2.namedWindow("Image",cv2.WINDOW_NORMAL)cv2.imshow("Image", img)cv2.imshow("Gaussian", dst)cv2.waitKey (0)cv2.destroyAllWindows()結果如下:

該系列文章首發於ebaina,可點擊連結了解更多

三、總結

了解了製作噪聲圖片的注意事項,偏亮偏暗值需要等值賦予了解高斯模糊的使用方法及保留輪廓的特性

相關焦點

  • 「python opencv視覺零基礎」十四、直方圖反向投影
    前文提醒:博主正在參加博客之星評比,成功入選Top200,現在暫居第九歡迎各位點擊了解更多幫我投票,非常感謝~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 「python opencv視覺零到實戰」八、圖片選區操作
    一、學習目標了解什麼是ROI了解floodFill的使用方法如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 世界上最好的語言PHP:OpenCV與計算機視覺已在我掌控之下
    現今,「機器學習」發展迅速,並有大量相關的文章,包括那些 Medium 上的博客,同時幾乎每位開發人員都開始在工作任務和本地項目中使用機器學習,但是從何處開始以及使用什麼方法總是令人困惑的。大多針對初學者的文章提供了一堆文獻,在閱讀中發現這些文章脫離生活,或提供一些「價」的課程等。
  • 如何快速簡單的安裝opencv-python
    這樣就會從清華鏡像安裝opencv-contrib-python庫。目前opencv最新版本為4.1.1 ----2019-8-28在opencv-contrib-python 版本中含有額外模塊( Extra modules ),而 opencv-python 版本中只含有基礎模塊。
  • opencv-python圖像預處理-濾波
    圖像濾波(模糊)濾波也叫模糊,下面是opencv中常見的五種濾波方法,先看一下濾波前後的效果。# -*- coding: utf-8 -*-"""運行環境 python==3.6 opencv-contrib-python== 4.1 win10系統第一行 「 # -*- coding: utf-8 -*- 」 告訴Python解釋器,按照UTF-8編碼讀取原始碼"""dir1="lena.jpg"
  • opencv-python獲取圖像:面向對象與面向過程
    這裡需要注意以下,opencv讀取圖片默認通道為BGR的格式,當在其他UI用戶界面顯示圖像時注意轉換一下通道順序,例如BGR轉換成RGB:Image1=cv2.cvtColor(image, cv2.COLOR_BGR2RGB)下面讀取一張圖片並顯示
  • 基於python+OpenCV模塊的人臉識別定位技術
    什麼是OpenCV模塊OpenCV是一款跨平臺的視覺庫,可以支持的作業系統有Linux、Windows和Mac OS作業系統,並且還提供了多種語言的接口,比如Python,java,MATLAB等常用語言。
  • Python中如何利用Opencv打開視頻或圖像並用PyQt控制項顯示
    OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS作業系統上,使用起來十分方便,把它與PyQt結合起來,就可以順利的操作視頻、圖像了。具體安裝請自行百度,這裡介紹使用方法。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    以下是兩門熱門課程,可開啟你的深度學習之旅:深度學習基礎(https://courses.analyticsvidhya.com/courses/fundamentals-of-deep-learning?
  • 「深度學習之opencv」Mat數據的矩陣輸出
    C++中使用opencv的時候,我們有事想看一下我們的圖像的數據,那麼怎麼將一個圖像數據輸出呢?sizeMat的默認輸出風格:默認風格Mat的Python輸出風格,就是python實際上,這不僅限於深度學習和計算機視覺,還包括模型算法原理,模型訓練,模型轉換優化,模型部署和深度學習框架。此外,還有C ++,數據結構和編譯底層等。歡迎大家的關注,我們將共同探討進步。
  • 基於opencv 的圖像處理入門教程
    前言雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • 「python學習手冊-筆記」003.數值類型
    「這不是演習!」好了,從本章開始,我們就要正式進入python的學習.所涉及的內容深度會有所提升,但是還到不了學習完1+1=2之後就開始微積分推導的陡峭程度. 相關的補充內容我會以知識點補充或者外鏈的方式添加進來.
  • 資料| Practical Python and OpenCV 一周時間帶你入門CV
  • OpenCV中的快速直線檢測
    本文範例運行環境FastLineDetectors運行必要條件FastLineDetectors屬於opencv-contrib中的模塊,需要安裝opencv-contrib-python。在python的opencv相關的安裝包中,opencv-python 包含主要模塊,opencv-contrib-python 包含主要模塊以及一些擴展模塊。但這兩個模塊並不兼容,如果已經安裝過opencv-python,需要先卸載,再安裝opencv-contrib-python。
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    /python3.5/dist-packages/tensorflow/modelsRUN apt-get install -y protobuf-compiler python-pil python-lxml python-tk#Set TF object detection availableENV PYTHONPATH "$PYTHONPATH:/usr
  • 用Python做特效,分分鐘碾壓五毛黨
    於是就有了下面這個操作:先看看效果,這是原場景:這是換過背景的樣子:看起來還不錯吧。再看另一種效果,是不是要狂放許多:重點來了!moviepypaddlehub都可以直接用pip安裝:pip install pillowpip install opencv-pythonpip install moviepy
  • 美翻朋友圈:用Python生成蒙太奇馬賽克圖片
    題圖 | 視覺中國我們有時候會聽到這麼一個詞--「蒙太奇」,但卻不知道這個詞是什麼意思。蒙太奇原為建築學術語,意為構成、裝配。而後又延伸為一種剪輯理論:當不同鏡頭拼接在一起時,往往又會產生各個鏡頭單獨存在時所不具有的特定含義。
  • 目標檢測必須要OpenCV?10行Python代碼也能實現,親測好用!
    本文作者和他的團隊構建了一個名為ImageAI 的Python庫,集成了現今流行的深度學習框架和計算機視覺庫。本文將手把手教你構建自己的第一個目標檢測應用,而且文摘菌已經幫你踩過坑了,親測有效!無人超市、人臉識別、無人駕駛,眾多的使用場景及案例,使得【目標檢測】正成為計算機視覺最有前景的方向。聽起來似乎是個很難實現的技術,需要大量訓練數據和算法才能完成。