日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

[python opencv 计算机视觉零基础到实战] 十、图片效果毛玻璃

發布時間:2023/12/4 python 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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 cv2 import 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]=255elif b+srand[0]<0:img[row,col,0]=0else:img[row,col,0]=b+srand[0]if g+srand[1]>255:img[row,col,1]=255elif g+srand[1]<0:img[row,col,1]=0else:img[row,col,1]=g+srand[1]if r+srand[2]>255:img[row,col,2]=255elif r+srand[2]<0:img[row,col,2]=0else: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 计算机视觉零基础到实战] 十、图片效果毛玻璃的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。