<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    [Python圖像處理] 一.圖像處理基礎知識及OpenCV入門函數

    該系列文章是講解Python OpenCV圖像處理知識,前期主要講解圖像入門、OpenCV基礎用法,中期講解圖像處理的各種算法,包括圖像銳化算子、圖像增強技術、圖像分割等,后期結合深度學習研究圖像識別、圖像分類應用。希望文章對您有所幫助,如果有不足之處,還請海涵~

    該系列在github所有源代碼:https://github.com/eastmountyxz/ImageProcessing-Python
    PS:請求幫忙點個Star,哈哈,第一次使用Github,以后會分享更多代碼,一起加油。

    同時推薦作者的C++圖像系列知識:
    [數字圖像處理] 一.MFC詳解顯示BMP格式圖片
    [數字圖像處理] 二.MFC單文檔分割窗口顯示圖片
    [數字圖像處理] 三.MFC實現圖像灰度、采樣和量化功能詳解
    [數字圖像處理] 四.MFC對話框繪制灰度直方圖
    [數字圖像處理] 五.MFC圖像點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
    [數字圖像處理] 六.MFC空間幾何變換之圖像平移、鏡像、旋轉、縮放詳解
    [數字圖像處理] 七.MFC圖像增強之圖像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解

    本篇文章作為第一篇,將講解圖像處理基礎知識和OpenCV入門函數,知識點如下:
    1.圖像基礎知識
    2.OpenCV讀寫圖像
    3.OpenCV像素處理

    PS: 文章也學習了網易云高登教育的知識,推薦大家學習。

    PSS:2019年1~2月作者參加了CSDN2018年博客評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

    五年來寫了314篇博客,12個專欄,是真的熱愛分享,熱愛CSDN這個平臺,也想幫助更多的人,專欄包括Python、數據挖掘、網絡爬蟲、圖像處理、C#、Android等?,F在也當了兩年老師,更是覺得有義務教好每一個學生,讓貴州學子好好寫點代碼,學點技術,"師者,傳到授業解惑也",提前祝大家新年快樂。2019我們攜手共進,為愛而生。

    一.圖像基礎知識

    圖像都是由像素(pixel)構成的,即圖像中的小方格,這些小方格都有一個明確的位置和被分配的色彩數值,而這些一小方格的顏色和位置就決定該圖像所呈現出來的樣子。像素是圖像中的最小單位,每一個點陣圖像包含了一定量的像素,這些像素決定圖像在屏幕上所呈現的大小。

    圖像通常包括二值圖像、灰度圖像和彩色圖像。

    1.二值圖像
    二值圖像中任何一個點非黑即白,要么為白色(像素為255),要么為黑色(像素為0)。將灰度圖像轉換為二值圖像的過程,常通過依次遍歷判斷實現,如果像素>=127則設置為255,否則設置為0。

    2.灰度圖像
    灰度圖像除了黑和白,還有灰色,它把灰度劃分為256個不同的顏色,圖像看著也更為清晰。將彩色圖像轉換為灰度圖是圖像處理的最基本預處理操作,通常包括下面幾種方法:
    (1) 浮點算法:Gray=R0.3+G0.59+B0.11
    (2) 整數方法:Gray=(R
    30+G59+B11)/100
    (3) 移位方法:Gray=(R28+G151+B77)>>8;
    (4) 平均值法:Gray=(R+G+B)/3;(此程序采用算法)
    (5) 僅取綠色:Gray=G;
    (6) 加權平均值算法:根據光的亮度特性,公式: R=G=B=R
    0.299+G*0.587+B0.144

    通過上述任一種方法求得Gray后,將原來的RGB(R,G,B)中的R,G,B統一用Gray替換,形成新的顏色RGB(Gray,Gray,Gray),用它替換原來的RGB(R,G,B)就是灰度圖了。改變象素矩陣的RGB值,來達到彩色圖轉變為灰度圖。

    3.彩色圖像
    彩色圖像是RGB圖像,RGB表示紅、綠、藍三原色,計算機里所有顏色都是三原色不同比例組成的,即三色通道。



    二.OpenCV讀寫圖像

    本文主要使用Python2.7和OpenCV進行講解,首先調用"pip install opencv-python"安裝OpenCV庫,如下圖所示:

    1.讀入圖像
    OpenCV讀圖像主要調用下面函數實現:

    img = cv2.imread(文件名,[,參數])
    參數(1) cv2.IMREAD_UNCHANGED (圖像不可變)
    參數(2) cv2.IMREAD_GRAYSCALE (灰度圖像)
    參數(3) cv2.IMREAD_COLOR (讀入彩色圖像)
    參數(4) cv2.COLOR_BGR2RGB (圖像通道BGR轉成RGB)

    2.顯示圖像
    顯示圖像調用函數如下:

    cv2.imshow(窗口名, 圖像名)

    3.窗口等待
    調用函數如下:

    cv2.waitKey(delay)
    鍵盤綁定函數,共一個參數,表示等待毫秒數,將等待特定的幾毫秒,看鍵盤是否有輸入,返回值為ASCII值。如果其參數為0,則表示無限期的等待鍵盤輸入;參數>0表示等待delay毫秒;參數<0表示等待鍵盤單擊。

    4.刪除所有窗口
    調用函數如下:

    cv2.destroyAllWindows() 刪除所有窗口
    cv2.destroyWindows() 刪除指定的窗口

    5.寫入圖片
    調用函數如下:

    retval = cv2.imwrite(文件地址, 文件名)

    下面代碼是讀入圖片并顯示保存。

    # -*- coding:utf-8 -*-
    import cv2
    
    #讀取圖片
    img = cv2.imread("test.jpg")
    
    #顯示圖像
    cv2.imshow("Demo", img)
    
    #等待顯示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    #寫入圖像
    cv2.imwrite("testyxz.jpg", img)
    

    輸出結果如下圖所示,并且在文件夾下保存了一張名為“testyxz.jpg”的圖像。

    如果代碼中沒有watiKey(0)函數,則運行結果如下圖所示:

    同時
    可以對代碼進行升級,如下所示:

    #無限期等待輸入
    k=cv2.waitKey(0)
    #如果輸入ESC退出
    if k==27:
        cv2.destroyAllWindows()
    


    三.OpenCV像素處理

    1.讀取像素
    灰度圖像直接返回灰度值,彩色圖像則返回B、G、R三個分量。注意OpenCV讀取圖像是BGR存儲顯示,需要轉換為RGB再進行圖像處理。

    灰度圖像:返回值 = 圖像(位置參數)
    eg: test=img[88,42]
    彩色圖像:返回值 = 圖像[位置元素, 0 | 1 | 2 ] 獲取BGR三個通道像素
    eg: blue=img[88,142,0] green=img[88,142,1] red=img[88,142,2]

    2.修改圖像
    修改圖像如果是灰度圖像則直接賦值新像素即可,彩色圖像依次給三個值賦值即可。

    灰度圖像:
    img[88,142] = 255
    彩色圖像:
    img[88,142, 0] = 255
    img[88,142, 1] = 255
    img[88,142, 2] = 255
    彩色圖像:方法二
    img[88,142] = [255, 255, 255]

    下面代碼是獲取像素及修改的操作。

    # -*- coding:utf-8 -*-
    import cv2
    
    #讀取圖片
    img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
    test = img[88,142]
    print test
    img[88,142] = [255, 255, 255]
    print test
    
    #分別獲取BGR通道像素
    blue = img[88,142,0]
    print blue
    green = img[88,142,1]
    print green
    red = img[88,142,2]
    print red
    
    #顯示圖像
    cv2.imshow("Demo", img)
    
    #等待顯示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    #寫入圖像
    cv2.imwrite("testyxz.jpg", img)
    

    輸出結果如下所示:
    [158 107 64]
    [255 255 255]
    255
    255
    255

    下面代碼是將行為100到200、列150到250的像素區域設置為白色。

    # -*- coding:utf-8 -*-
    import cv2
    
    #讀取圖片
    img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
    
    #該區域設置為白色
    img[100:200, 150:250] = [255,255,255]
    
    #顯示圖像
    cv2.imshow("Demo", img)
    
    #等待顯示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    #寫入圖像
    cv2.imwrite("testyxz.jpg", img)
    

    運行結果如下圖所示:

    希望文章對大家有所幫助,如果有錯誤或不足之處,還請海涵。
    (By:Eastmount 2018-08-16 夜11點 http://www.gifted-edu.com/Eastmount/


    2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數據分析、網絡空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享CCF、SCI、南核北核論文的算法實現。娜璋之家會更加系統,并重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝。

    已標記關鍵詞 清除標記
    ??2020 CSDN 皮膚主題: 書香水墨 設計師:CSDN官方博客 返回首頁
    實付 9.90元
    使用余額支付
    點擊重新獲取
    掃碼支付
    錢包余額 0

    抵扣說明:

    1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
    2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

    余額充值
    多乐彩