Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區(qū)別
為什么使用Python-OpenCV?
雖然python 很強(qiáng)大,而且也有自己的圖像處理庫PIL,但是相對(duì)于OpenCV 來講,它還是弱小很多。跟很多開源軟件一樣OpenCV 也提供了完善的python 接口,非常便于調(diào)用。OpenCV 的最新版是4.0,包含了超過2500 個(gè)算法和函數(shù),幾乎任何一個(gè)能想到的成熟算法都可以通過調(diào)用OpenCV 的函數(shù)來實(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顧名思義等待鍵盤輸入,單位為毫秒,即等待指定的毫秒數(shù)看是否有鍵盤輸入,若在等待時(shí)間內(nèi)按下任意鍵則返回按鍵的ASCII碼,程序繼續(xù)運(yùn)行。若沒有按下任何鍵,超時(shí)后返回-1。參數(shù)為0表示無限等待。不調(diào)用waitKey的話,窗口會(huì)一閃而逝,看不到顯示的圖片。
- cv2.destroyAllWindow()銷毀所有窗口
- cv2.destroyWindow(wname)銷毀指定窗口
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類型為 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ǔ)的。
可以先通過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]
綜合示例
讀入一張圖片并顯示出來,經(jīng)過操作后,選擇退出或保存。
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'
參考鏈接:
1、https://blog.csdn.net/fu6543210/article/details/80835280
2、http://www.runoob.com/python/python-func-ord.html
到此這篇關(guān)于Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()的區(qū)別的文章就介紹到這了,更多相關(guān)OpenCV cv2.imread(),cv2.imshow(),cv2.imwrite()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3.x 生成3維隨機(jī)數(shù)組實(shí)例
今天小編就為大家分享一篇python3.x 生成3維隨機(jī)數(shù)組實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11利用python+ffmpeg合并B站視頻及格式轉(zhuǎn)換的實(shí)例代碼
這篇文章主要介紹了利用python+ffmpeg合并B站視頻及格式轉(zhuǎn)換的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11python自動(dòng)化測(cè)試中裝飾器@ddt與@data源碼深入解析
最近工作中接觸了python自動(dòng)化測(cè)試,所以下面這篇文章主要給大家介紹了關(guān)于python自動(dòng)化測(cè)試中裝飾器@ddt與@data源碼解析的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Python讀csv文件去掉一列后再寫入新的文件實(shí)例
下面小編就為大家分享一篇Python讀csv文件去掉一列后再寫入新的文件實(shí)例,具有很的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12python實(shí)現(xiàn)百度關(guān)鍵詞排名查詢
這篇文章主要介紹了python實(shí)現(xiàn)百度關(guān)鍵詞排名查詢,需要的朋友可以參考下2014-03-03python輸出100以內(nèi)的質(zhì)數(shù)與合數(shù)實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了python輸出100以內(nèi)的質(zhì)數(shù)與合數(shù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07Python+Selenium實(shí)現(xiàn)讀取網(wǎng)易郵箱驗(yàn)證碼
在自動(dòng)化工作中,有可能會(huì)遇到一些發(fā)送郵箱驗(yàn)證碼類似的功能。本文將利用Python?Selenium實(shí)現(xiàn)自動(dòng)化讀取網(wǎng)易郵箱驗(yàn)證碼,感興趣的可以了解一下2022-03-03django 實(shí)現(xiàn)電子支付功能的示例代碼
這篇文章主要介紹了django 實(shí)現(xiàn)電子支付功能的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07