溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區(qū)別有哪些

發(fā)布時(shí)間:2021-06-18 09:10:46 來(lái)源:億速云 閱讀:190 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區(qū)別有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

    為什么使用Python-OpenCV?

    雖然python 很強(qiáng)大,而且也有自己的圖像處理庫(kù)PIL,但是相對(duì)于OpenCV 來(lái)講,它還是弱小很多。跟很多開(kāi)源軟件一樣OpenCV 也提供了完善的python 接口,非常便于調(diào)用。OpenCV 的最新版是4.0,包含了超過(guò)2500 個(gè)算法和函數(shù),幾乎任何一個(gè)能想到的成熟算法都可以通過(guò)調(diào)用OpenCV 的函數(shù)來(lái)實(shí)現(xiàn),超級(jí)方便。

    基本操作

    1、圖像讀入

    使用函數(shù)cv2.imread(filepath,flags) 讀入圖像。這幅圖像應(yīng)該在此程序的工作路徑,或者給函數(shù)提供完整路徑,第二個(gè)參數(shù)是要告訴函數(shù)應(yīng)該如何讀取這幅圖片,可省略。

    filepath:要讀入圖片的完整路徑 flags:讀入圖片的標(biāo)志

    • cv2.IMREAD_COLOR:默認(rèn)參數(shù),讀入一副彩色圖片,忽略alpha通道

    • cv2.IMREAD_GRAYSCALE:讀入灰度圖片

    • cv2.IMREAD_UNCHANGED:顧名思義,讀入完整圖片,包括alpha通道

    import cv2
    import numpy as np
    img = cv2.imread('1.jpg', cv2.IMREAD_GRAYSCALE)

    2、顯示圖片

    使用函數(shù)cv2.imshow(wname,img)顯示圖像,第一個(gè)參數(shù)是顯示圖像的窗口的名字,第二個(gè)參數(shù)是要顯示的圖像(imread讀入的圖像),窗口大小自動(dòng)調(diào)整為圖片大小。

    cv2.imshow('image',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()   #cv2.destroyWindow(wname)
    • cv2.waitKey顧名思義等待鍵盤(pán)輸入,單位為毫秒,即等待指定的毫秒數(shù)看是否有鍵盤(pán)輸入,若在等待時(shí)間內(nèi)按下任意鍵則返回按鍵的ASCII碼,程序繼續(xù)運(yùn)行。若沒(méi)有按下任何鍵,超時(shí)后返回-1。參數(shù)為0表示無(wú)限等待。不調(diào)用waitKey的話(huà),窗口會(huì)一閃而逝,看不到顯示的圖片。

    • cv2.destroyAllWindow()銷(xiāo)毀所有窗口

    • cv2.destroyWindow(wname)銷(xiāo)毀指定窗口

    3、保存圖片

    使用函數(shù)cv2.imwrite(file,img,num)保存一個(gè)圖像。第一個(gè)參數(shù)是要保存的文件名,第二個(gè)參數(shù)是要保存的圖像??蛇x的第三個(gè)參數(shù),它針對(duì)特定的格式:對(duì)于JPEG,其表示的是圖像的質(zhì)量,用0 - 100的整數(shù)表示,默認(rèn)95;對(duì)于png ,第三個(gè)參數(shù)表示的是壓縮級(jí)別,默認(rèn)為3。

    注意:

    • cv2.IMWRITE_JPEG_QUALITY類(lèi)型為 long ,必須轉(zhuǎn)換成 int

    • cv2.IMWRITE_PNG_COMPRESSION, 從0到9 壓縮級(jí)別越高圖像越小

    cv2.imwrite('1.png',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95])
    cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

    變換操作

    1、翻轉(zhuǎn)圖片

    使用函數(shù)cv2.flip(img,flipcode)翻轉(zhuǎn)圖像,flipcode控制翻轉(zhuǎn)效果。

    • flipcode = 0:沿x軸翻轉(zhuǎn)

    • flipcode > 0:沿y軸翻轉(zhuǎn)

    • flipcode < 0:x,y軸同時(shí)翻轉(zhuǎn)

    imgflip = cv2.flip(img,1)

    2、復(fù)制圖片

    imgcopy = img.copy()

    3、顏色空間轉(zhuǎn)換

    注意,matplotlib 中圖像通道為 RGB,而 OpenCV 中圖像通道為 BGR。因此進(jìn)行顯示的時(shí)候,要注意交換通道的順序。

    彩色圖像轉(zhuǎn)為灰度圖像

    img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)

    灰度圖像轉(zhuǎn)為彩色圖像

    img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)

    4、裁剪圖片

    裁剪出自己感興趣的部分(ROI,region of interest),需要用到numpy的切片功能,因?yàn)镺penCV中,圖像就是用numpy.ndarray存儲(chǔ)的。

    可以先通過(guò)image.shape查看行列數(shù)

    print(image.shape)

    例如返回(708,1000,4)分別表示圖片的高、寬和通道數(shù)。

    對(duì)圖片的裁剪其實(shí)就是切片,例如

    #得到區(qū)域高100~800步長(zhǎng)為2,寬200~600步長(zhǎng)為1, 通道0
    image2 = image[100:800:2, 20:600:1, 0]
    
    
    #得到原圖,通道2
    image3 = image[:, :, 2]

    綜合示例

    讀入一張圖片并顯示出來(lái),經(jīng)過(guò)操作后,選擇退出或保存。

      import cv2
      import numpy as np
      
      img = cv2.imread('a.jpg')
      cv2.imshow('image',img)
      
      # Wait for keys to exit or save
      k = cv2.waitKey(0)
      if k == 27:                 
         cv2.destroyAllWindows()
     elif k == ord('s'):        
         cv2.imwrite('save_image.jpg', img)
         cv2.destroyAllWindows()

    ord('s')表示返回字符s的ASCII值,ASCII值27對(duì)應(yīng)‘Esc'

    以上是“Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區(qū)別有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI