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

Python?OpenCV實(shí)現(xiàn)圖像增強(qiáng)操作詳解

 更新時(shí)間:2022年10月19日 10:31:27   作者:卿云閣  
由于很多不確定因素,導(dǎo)致圖像采集的光環(huán)境極其復(fù)雜;為了提高目標(biāo)檢測模型的泛化能力,本文將使用python中的opencv模塊實(shí)現(xiàn)常見的圖像增強(qiáng)方法,感興趣的可以了解一下

創(chuàng)作背景

最近在忙著兩個(gè)YOLOv7項(xiàng)目,通過看大量的論文,發(fā)現(xiàn)很多的相關(guān)的論文都會(huì)在收集圖像后進(jìn)行圖像的增強(qiáng),本文將使用python中的opencv模塊實(shí)現(xiàn)常見的圖像增強(qiáng)方法。

由于光照角度和天氣等不確定因素,導(dǎo)致圖像采集的光環(huán)境極其復(fù)雜;為了提高目標(biāo)檢測模型的泛化能力,本文采用了幾種圖像增強(qiáng)方法。

圖像增強(qiáng)方法包括

  • 圖像亮度增強(qiáng)和降低
  • 水平鏡像
  • 垂直鏡像
  • 多角度旋轉(zhuǎn)(90°?,180°?,270°?)
  • 高斯噪聲

此外,考慮到圖像采集設(shè)備在圖像采集過程中產(chǎn)生的噪聲,以及設(shè)備或樹枝晃動(dòng)造成的拍攝圖像模糊,在圖像中加入方差為0.02的高斯噪聲,進(jìn)行運(yùn)動(dòng)模糊處理。

圖像亮度增強(qiáng)和降低

圖像亮度。指數(shù)字圖像中包含色彩的明暗程度,是人眼對(duì)物體本身明暗程度的感覺。

圖像亮度調(diào)節(jié)可以采用最簡單的圖像處理算法,通過常見的線性運(yùn)算即完成亮度調(diào)節(jié),這里我們讓所有的像素點(diǎn)亮度值乘上一個(gè)增強(qiáng)系數(shù) percetage,使得圖像整體變亮或者變暗。

# 變暗
def Darker(image,percetage=0.9):
    image_copy = image.copy()
    w = image.shape[1]
    h = image.shape[0]
    #get darker
    for xi in range(0,w):
        for xj in range(0,h):
            image_copy[xj,xi,0] = int(image[xj,xi,0]*percetage)
            image_copy[xj,xi,1] = int(image[xj,xi,1]*percetage)
            image_copy[xj,xi,2] = int(image[xj,xi,2]*percetage)
    return image_copy
# 明亮
def Brighter(image, percetage=1.1):
    image_copy = image.copy()
    w = image.shape[1]
    h = image.shape[0]
    #get brighter
    for xi in range(0,w):
        for xj in range(0,h):
            image_copy[xj,xi,0] = np.clip(int(image[xj,xi,0]*percetage),a_max=255,a_min=0)
            image_copy[xj,xi,1] = np.clip(int(image[xj,xi,1]*percetage),a_max=255,a_min=0)
            image_copy[xj,xi,2] = np.clip(int(image[xj,xi,2]*percetage),a_max=255,a_min=0)
    return image_copy

旋轉(zhuǎn)

本文使用opencv中的使用getRotationMatrix2D() 函數(shù)和warpAffine() 函數(shù)實(shí)現(xiàn)旋轉(zhuǎn)原始圖像,通過改變函數(shù)參數(shù)“angle”分別實(shí)現(xiàn)90°?、180°?、270°旋轉(zhuǎn)。變換后的圖像可以通過正確識(shí)別不同方位的目標(biāo)來提高模型的檢測性能。改變函數(shù)參數(shù)scal一個(gè)各向同性比例因子,根據(jù)提供的值向上或向下縮放圖像。

# 旋轉(zhuǎn),R可控制圖片放大縮小
def Rotate(image, angle=15, scale=1):
    w = image.shape[1]
    h = image.shape[0]
    #rotate matrix
    M = cv2.getRotationMatrix2D((w/2,h/2), angle, scale)
    #rotate
    image = cv2.warpAffine(image,M,(w,h))
    return image

水平鏡像和垂直鏡像

圖像鏡像(水平和垂直鏡像)是通過opencv中的使用flip函數(shù)實(shí)現(xiàn)的,通過以圖像的垂直線為中心變換圖像的左側(cè)和右側(cè)來實(shí)現(xiàn)水平鏡像。垂直鏡像是通過以圖像的水平中心線為中心變換圖像的上下側(cè)來實(shí)現(xiàn)的。

# 水平翻轉(zhuǎn)
def Horizontal(image):
    return cv2.flip(image,1,dst=None)
 
# 垂直翻轉(zhuǎn)
def Vertical(image):
    return cv2.flip(image,0,dst=None)

高斯噪聲

本文使用NumPy中的可以產(chǎn)生符合高斯分布(正態(tài)分布)的隨機(jī)數(shù)的 np.random.normal()函數(shù)。利用產(chǎn)生隨機(jī)數(shù)的函數(shù)來對(duì)圖像添加方差為0.02的高斯噪聲。

def gaussian_noise(image, mean=0, var=0.02):
    # 添加高斯噪聲
    # mean : 均值
    # var : 方差
    image = np.array(image / 255, dtype=float)
    noise = np.random.normal(mean, var ** 0.5, image.shape)
    out = image + noise
    if out.min() < 0:
        low_clip = -1.
    else:
        low_clip = 0.
    out = np.clip(out, low_clip, 1.0)
    out = np.uint8(out * 255)
    return out

其它圖像增強(qiáng)的方法

# 放大縮小
def Scale(image, scale):
    return cv2.resize(image,None,fx=scale,fy=scale,interpolation=cv2.INTER_LINEAR)
# 平移
def Move(img,x,y):
    img_info=img.shape
    height=img_info[0]
    width=img_info[1]
 
    mat_translation=np.float32([[2,0,x],[0,2,y]])  #變換矩陣:設(shè)置平移變換所需的計(jì)算矩陣:2行3列
    #[[1,0,20],[0,1,50]]   表示平移變換:其中x表示水平方向上的平移距離,y表示豎直方向上的平移距離。
    dst=cv2.warpAffine(img,mat_translation,(width,height))  #變換函數(shù)
# 椒鹽噪聲
def SaltAndPepper(src,percetage=0.05):
    SP_NoiseImg=src.copy()
    SP_NoiseNum=int(percetage*src.shape[0]*src.shape[1])
    for i in range(SP_NoiseNum):
        randR=np.random.randint(0,src.shape[0]-1)
        randG=np.random.randint(0,src.shape[1]-1)
        randB=np.random.randint(0,3)
        if np.random.randint(0,1)==0:
            SP_NoiseImg[randR,randG,randB]=0
        else:
            SP_NoiseImg[randR,randG,randB]=255
    return SP_NoiseImg
#模糊
def Blur(img):
    blur = cv2.GaussianBlur(img, (7, 7), 1.5)
    # #      cv2.GaussianBlur(圖像,卷積核,標(biāo)準(zhǔn)差)
    return blur

適用于項(xiàng)目的的整體代碼

為了滿足項(xiàng)目的使用,我對(duì)上述代碼進(jìn)行了了擴(kuò)充,實(shí)現(xiàn)了對(duì)單個(gè)圖片,單個(gè)文件夾和多個(gè)文件夾中多個(gè)圖片的圖像的增強(qiáng)

到此這篇關(guān)于Python OpenCV實(shí)現(xiàn)圖像增強(qiáng)操作詳解的文章就介紹到這了,更多相關(guān)Python OpenCV圖像增強(qiáng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中round函數(shù)如何使用

    python中round函數(shù)如何使用

    在本篇文章里小編給大家整理了關(guān)于python的round函數(shù)用法總結(jié)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • python異步任務(wù)隊(duì)列示例

    python異步任務(wù)隊(duì)列示例

    這篇文章主要介紹了python異步任務(wù)隊(duì)列示例,需要的朋友可以參考下
    2014-04-04
  • Python實(shí)現(xiàn)的HTTP并發(fā)測試完整示例

    Python實(shí)現(xiàn)的HTTP并發(fā)測試完整示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的HTTP并發(fā)測試,涉及Python多線程并發(fā)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-05-05
  • Python中NumPy的矩陣與通用函數(shù)

    Python中NumPy的矩陣與通用函數(shù)

    這篇文章主要介紹了Python中NumPy的矩陣與通用函數(shù),Numpy是python的一種開源的數(shù)值計(jì)算擴(kuò)展。這種工具可用來存儲(chǔ)和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多支持大量的維度數(shù)組與矩陣運(yùn)算,需要的朋友可以參考下
    2023-07-07
  • centos系統(tǒng)升級(jí)python 2.7.3

    centos系統(tǒng)升級(jí)python 2.7.3

    CentOS上安裝的python版本是2.6,不能滿足我運(yùn)行軟件的要求,所以對(duì)python進(jìn)行升級(jí)。Python的最新版本已經(jīng)是3.3,但是Python3的兼容性可能還有一定的問題,所以還是升級(jí)到2.7較為保險(xiǎn)。
    2014-07-07
  • Python將py文件編譯為exe文件

    Python將py文件編譯為exe文件

    大家好,本篇文章主要講的是Python將py文件編譯為exe文件,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • Python 解析pymysql模塊操作數(shù)據(jù)庫的方法

    Python 解析pymysql模塊操作數(shù)據(jù)庫的方法

    這篇文章主要介紹了Python 解析pymysql模塊操作數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例

    使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例

    這篇文章主要介紹了使用Python實(shí)現(xiàn)七大排序算法的代碼實(shí)例,所謂排序,就是使一串記錄,按照其中的某個(gè)或某些關(guān)鍵字的大小,遞增或遞減的排列起來的操作,需要的朋友可以參考下
    2023-07-07
  • Python實(shí)現(xiàn)讀取文件最后n行的方法

    Python實(shí)現(xiàn)讀取文件最后n行的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)讀取文件最后n行的方法,涉及Python針對(duì)文件的讀取、遍歷與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • PyTorch?device與cuda.device用法介紹

    PyTorch?device與cuda.device用法介紹

    這篇文章主要介紹了PyTorch?device與cuda.device用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論