<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          6個(gè)案例手把手教你用Python和OpenCV進(jìn)行圖像處理

          共 8316字,需瀏覽 17分鐘

           ·

          2020-08-26 09:39


          導(dǎo)讀:圖像是由若干個(gè)像素組成的,因此,圖像處理可以看作計(jì)算機(jī)對像素的處理。在面向Python的OpenCV中,可以通過位置索引的方式對圖像內(nèi)的像素進(jìn)行訪問和處理。


          本文手把手教你圖像處理的基本操作。


          作者:高敬鵬 江志燁 趙娜
          來源:大數(shù)據(jù)DT(ID:hzdashuju)





          01 圖像的讀取、顯示和保存


          OpenCV提供了cv2模塊,用于進(jìn)行圖像的處理操作。


          1. 讀取圖像


          OpenCV提供了cv2.imread()函數(shù)用于進(jìn)行圖像的讀取操作。該函數(shù)的基本格式為:


          retval = cv2.imread(filename[, flags])


          其中:


          • retval是返回值,其值是讀取到的圖像。

          • filename是要讀取圖像的完整文件名。

          • flags是讀取標(biāo)記,用來控制讀取文件的類型。部分常用的標(biāo)記值如表3-1所示,其中第一列的值與第三列的數(shù)值表示的含義一致。


          ▲表3-1 常用flags標(biāo)記值


          • 例3-1 使用cv2.imread()函數(shù)讀取一幅圖像

          代碼如下:

          import cv2 as cv
          image = cv2.imread("F:/picture/lena.png")      # 讀取lena圖像
          print(image)

          運(yùn)行代碼會得到lena圖像的像素值,如圖3-3所示。

          ▲圖3-3 lena圖像部分像素值

          2. 顯示圖像

          OpenCV提供了多個(gè)與圖像顯示有關(guān)的函數(shù),下面簡單介紹常用的幾個(gè)。

          namedWindow()函數(shù)用來創(chuàng)建指定的窗口,一般格式如下:

          None = cv2.namedWindow(window)

          其中,window是窗口的名字。例如:

          cv2.namedWindow("image")

          這句程序會新建一個(gè)名字為image的窗口。

          imshow()函數(shù)用來顯示圖像,其一般格式如下:

          None = cv2.imshow(window, image)

          其中:

          • window是窗口的名字。
          • image是要顯示的圖像。

          waitKey()函數(shù)用來等待按鍵,當(dāng)有鍵被按下時(shí),該語句會被執(zhí)行。其一般格式如下:

          retval= cv2.waitKey([delay])

          其中:

          • retval是返回值。
          • delay表示等待鍵盤觸發(fā)的時(shí)間,單位是ms。當(dāng)該值為負(fù)數(shù)或0時(shí)表示無限等待,默認(rèn)值為0。

          destroyAllWindows函數(shù)用來釋放所有窗口,其一般格式為:

          None = cv2. destroyAllWindows ()

          • 例3-2 顯示讀取的圖像

          代碼如下:

          import cv2 as cv               # 導(dǎo)入從cv2模塊
          image = cv.imread("F:/picture/lena.png")     # 讀取lena圖像
          cv.namedWindow("image")     # 創(chuàng)建一個(gè)image的窗口
          cv.imshow("image", image)    # 顯示圖像
          cv.waitKey()               # 默認(rèn)為0,無限等待
          cv.destroyAllWindows()      # 釋放所有窗口

          程序運(yùn)行結(jié)果如圖3-4所示。

          ▲圖3-4 例3-2的運(yùn)行結(jié)果

          3. 保存圖像

          OpenCV中提供了cv2.imwrite()函數(shù)來保存圖像,其一般格式為:

          retval= cv2.imwrite(filename, img[, params])

          其中:

          • retval是返回值。
          • filename是要保存的圖像的完整路徑名,包括文件的擴(kuò)展名。
          • img是要保存的圖像的名字。
          • params是保存的類型參數(shù),可選。

          • 例3-3 編寫程序,將讀取到的圖像保存

          代碼如下:

          import cv2 as cv               # 導(dǎo)入從cv2模塊
          image = cv.imread("F:/picture/lena.png")     # 讀取lena圖像
          cv.imwrite("F:/picture/lenaresult.png",image) #將圖像保存到F:/picture/下,名字為lenaresult


          02 圖像通道的基本操作

          在圖像處理過程中,有時(shí)會根據(jù)需要對通道進(jìn)行拆分與合并。在OpenCV中提供了split()和merge()函數(shù)對圖像進(jìn)行拆分與合并。下面對這兩個(gè)函數(shù)進(jìn)行介紹。

          1. split()拆分函數(shù)

          函數(shù)split()可以拆分圖像的通道,例如BGR圖像的三個(gè)通道。其一般格式如下:

          b,g,r = cv2.split(img)

          其中:

          • b、g、r分別是B通道、G通道、R通道的圖像信息。
          • img是要拆分的圖像。

          • 例3-4 編寫程序,使用split()函數(shù)對圖像進(jìn)行拆分

          代碼如下:

          import cv2 as cv
          image = cv.imread("F:/picture/lena.png")
          b,g,r = cv.split(image)          # 拆分圖像通道分為b,g,r三個(gè)通道
          cv.imshow("b",b)             # 顯示b通道的圖像信息
          cv.imshow("g",g)    # 顯示g通道的圖像信息
          cv.imshow("r",r)    # 顯示r通道的圖像信息
          cv.imshow("image", image)
          cv.waitKey()
          cv.destroyAllWindows()

          程序運(yùn)行結(jié)果如圖3-5所示。

          ▲圖3-5 例3-4的運(yùn)行結(jié)果:a)原始圖像,b)B通道圖像,c)G通道圖像,d)R通道圖像

          其中,圖3-5a是原圖,圖3-5b是B通道的圖像,圖3-5c是G通道的圖像,圖3-5d是R通道的圖像。

          2. merge()合并函數(shù)

          通道合并是通道拆分的逆過程,可以將三個(gè)通道的灰度圖像合并為一張彩色圖像。OpenCV中提供了merge()函數(shù)來實(shí)現(xiàn)圖像通道的合并,其基本格式為:

          imagebgr = cv2.merge([b,g,r])

          其中:

          • imagebgr是合并后的圖像。
          • b、g、r分別是B通道、G通道、R通道的圖像信息。

          • 例3-5 編寫程序,演示合并圖像的過程

          代碼如下:

          import cv2 as cv
          image = cv.imread("F:/picture/lena.png")
          b,g,r = cv.split(image)          # 拆分圖像通道分為b,g,r三個(gè)通道
          imagebgr = cv.merge([b,g,r])    # 將b,g,r三個(gè)通道的圖像合并
          cv.imshow("image", image)
          cv.imshow("imagegbgr", imagebgr)
          cv.waitKey()
          cv.destroyAllWindows()

          程序運(yùn)行結(jié)果如圖3-6所示。

          ▲圖3-6 例3-5的運(yùn)行結(jié)果:a)原始圖像 b)拆分并合并后的圖像

          其中,圖3-6a是原始圖像,圖3-6b是經(jīng)過拆分后又合并的圖像。


          03 圖像屬性的獲取

          在進(jìn)行圖像處理時(shí)經(jīng)常需要獲取圖像的大小、類型等屬性信息。下面介紹幾個(gè)常用屬性。

          • shape:表示圖像的大小。如果是彩色圖像,則返回包含行數(shù)、列數(shù)和通道數(shù)的數(shù)組;如果是二值圖像或灰度圖像,則返回包含行數(shù)和列數(shù)的數(shù)組。
          • size:表示返回的圖像的像素?cái)?shù)目。
          • dtype:表示返回的圖像的數(shù)據(jù)類型。

          • 例3-6 編寫程序,觀察圖像的屬性值

          代碼如下:

          import cv2 as cv
          image = cv.imread("F:/picture/lena.png")
          print("image.shape",image.shape)        # 輸出圖像的大小屬性
          print("image.size",image.size)          # 輸出圖像的像素?cái)?shù)目屬性
          print("image.dtype",image.dtype)        # 輸出圖像的類型屬性

          程序運(yùn)行結(jié)果為:

          image.shape (5125123)
          image.size 786432
          image.dtype uint8

          關(guān)于作者:高敬鵬,博士學(xué)歷,碩士生導(dǎo)師,2002年至今,任職于哈爾濱工程大學(xué)信息與通信工程學(xué)院。研究方向主要包括人工智能、機(jī)器學(xué)習(xí)、圖像處理、信號檢測、目標(biāo)識別、現(xiàn)代通信技術(shù)與電子系統(tǒng)等。

          江志燁,博士學(xué)歷,研究員,任職于北京航天長征飛行器研究所。

          趙娜,博士學(xué)歷,講師,任職于重慶電子工程職業(yè)學(xué)院。


          本文摘編自機(jī)器學(xué)習(xí):基于OpenCV和Python的智能圖像處理》,經(jīng)出版方授權(quán)發(fā)布。


          延伸閱讀機(jī)器學(xué)習(xí):基于OpenCV和Python的智能圖像處理
          點(diǎn)擊上圖了解及購買

          轉(zhuǎn)載請聯(lián)系微信:DoctorData


          推薦語:依照由淺入深、循序漸進(jìn)的原則編寫,并與大量實(shí)例相結(jié)合,使讀者可以邊學(xué)邊練,從而提高學(xué)習(xí)的興趣與效率。



          劃重點(diǎn)?


          干貨直達(dá)?


          更多精彩?

          在公眾號對話框輸入以下關(guān)鍵詞
          查看更多優(yōu)質(zhì)內(nèi)容!

          PPT | 讀書 | 書單 | 硬核 | 干貨 | 講明白 | 神操作
          大數(shù)據(jù) | 云計(jì)算 | 數(shù)據(jù)庫 | Python | 可視化
          AI | 人工智能 | 機(jī)器學(xué)習(xí) | 深度學(xué)習(xí) | NLP
          5G | 中臺 | 用戶畫像 1024 | 數(shù)學(xué) | 算法 數(shù)字孿生

          據(jù)統(tǒng)計(jì),99%的大咖都完成了這個(gè)神操作
          ?


          瀏覽 12
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲图片小说在线视频 | 激情丁香五月天 | 激情乱伦视频网 | 国产熟妇 码视频黑料 | 射射蜜桃av免费电影 |