最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?OpenCV實現圖像增強操作詳解

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

創(chuàng)作背景

最近在忙著兩個YOLOv7項目,通過看大量的論文,發(fā)現很多的相關的論文都會在收集圖像后進行圖像的增強,本文將使用python中的opencv模塊實現常見的圖像增強方法。

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

圖像增強方法包括

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

此外,考慮到圖像采集設備在圖像采集過程中產生的噪聲,以及設備或樹枝晃動造成的拍攝圖像模糊,在圖像中加入方差為0.02的高斯噪聲,進行運動模糊處理。

圖像亮度增強和降低

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

圖像亮度調節(jié)可以采用最簡單的圖像處理算法,通過常見的線性運算即完成亮度調節(jié),這里我們讓所有的像素點亮度值乘上一個增強系數 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

旋轉

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

# 旋轉,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函數實現的,通過以圖像的垂直線為中心變換圖像的左側和右側來實現水平鏡像。垂直鏡像是通過以圖像的水平中心線為中心變換圖像的上下側來實現的。

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

高斯噪聲

本文使用NumPy中的可以產生符合高斯分布(正態(tài)分布)的隨機數的 np.random.normal()函數。利用產生隨機數的函數來對圖像添加方差為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

其它圖像增強的方法

# 放大縮小
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]])  #變換矩陣:設置平移變換所需的計算矩陣:2行3列
    #[[1,0,20],[0,1,50]]   表示平移變換:其中x表示水平方向上的平移距離,y表示豎直方向上的平移距離。
    dst=cv2.warpAffine(img,mat_translation,(width,height))  #變換函數
# 椒鹽噪聲
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(圖像,卷積核,標準差)
    return blur

適用于項目的的整體代碼

為了滿足項目的使用,我對上述代碼進行了了擴充,實現了對單個圖片,單個文件夾和多個文件夾中多個圖片的圖像的增強

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

相關文章

  • python粘包問題及socket套接字編程詳解

    python粘包問題及socket套接字編程詳解

    這篇文章主要介紹了python粘包問題及socket套接字編程詳解,之所以出現粘包,是因為兩個數據非常小,然后間隔時間又短,或數據太大,一次取不完,下一次還會取這個大數據,需要的朋友可以參考下
    2019-06-06
  • Python類和對象基礎入門介紹

    Python類和對象基礎入門介紹

    Python 是一種面向對象的編程語言。Python 中的幾乎所有東西都是對象,擁有屬性和方法。類(Class)類似對象構造函數,或者是用于創(chuàng)建對象的藍圖
    2022-08-08
  • Python使用openpyxl實現Excel超鏈接批量化設置

    Python使用openpyxl實現Excel超鏈接批量化設置

    在Excel中,超鏈接是一種非常有用的功能,本文我們將介紹如何使用Python來處理Excel中的超鏈接,以及如何將超鏈接與對應的工作表鏈接起來,需要的可以參考一下
    2023-07-07
  • Keras多線程機制與flask多線程沖突的解決方案

    Keras多線程機制與flask多線程沖突的解決方案

    這篇文章主要介紹了Keras多線程機制與flask多線程沖突的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Matplotlib的反轉軸、繪制雙軸和定制刻度詳解

    Matplotlib的反轉軸、繪制雙軸和定制刻度詳解

    這篇文章主要介紹了Matplotlib的反轉軸、繪制雙軸和定制刻度詳解,作為Python生態(tài)中應用最廣泛的繪圖庫,Matplotlib用起來非常簡單,也很容易上手,本文匯總了和軸、刻度相關的七個Matplotlib使用技巧,并給出了實例代碼,需要的朋友可以參考下
    2023-08-08
  • Python os.rename() 重命名目錄和文件的示例

    Python os.rename() 重命名目錄和文件的示例

    今天小編就為大家分享一篇Python os.rename() 重命名目錄和文件的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python中tuple類型的使用

    Python中tuple類型的使用

    在Python中,元組(tuple)是一種不可變的序列類型,可以包含多個值,這些值可以是不同類型的,本文主要介紹了Python中tuple類型的使用,感興趣的可以了解一下
    2023-12-12
  • 利用4行Python代碼監(jiān)測每一行程序的運行時間和空間消耗

    利用4行Python代碼監(jiān)測每一行程序的運行時間和空間消耗

    這篇文章主要介紹了如何使用4行Python代碼監(jiān)測每一行程序的運行時間和空間消耗,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • python numpy中setdiff1d的用法說明

    python numpy中setdiff1d的用法說明

    這篇文章主要介紹了python numpy中setdiff1d的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • pandas?實現?in?和?not?in?的用法及使用心得

    pandas?實現?in?和?not?in?的用法及使用心得

    pandas按條件篩選數據時,除了使用query()方法,還可以使用isin和對isin取反進行條件篩選,今天通過本文給大家介紹pandas?實現?in?和?not?in?的用法及使用心得,感興趣的朋友跟隨小編一起看看吧
    2023-01-01

最新評論

香格里拉县| 正安县| 老河口市| 保康县| 托克逊县| 随州市| 抚宁县| 阆中市| 丹巴县| 平罗县| 洛扎县| 菏泽市| 新兴县| 营山县| 沁阳市| 成武县| 天台县| 自贡市| 平凉市| 梁山县| 朝阳市| 镇坪县| 陇南市| 安阳县| 阿克苏市| 常宁市| 靖远县| 吉木萨尔县| 雅安市| 唐海县| 泰和县| 浦县| 泸州市| 玉屏| 六枝特区| 信阳市| 肇东市| 上饶市| 江门市| 盐边县| 宝鸡市|