如何利用OpenCV讀取,顯示以及寫入圖片?
簡 介:
本文中,你了解了: imread(), imshow()以及imwrite()等函數用于圖像的讀取、顯示和保存; waitKey(), destroyAllWindows()函數用于:對于waitKey()函數建議你多做些實驗,因為它的某些特性比較容易讓人搞混淆。 你對它越熟悉,你就能夠更好的掌握它。對于文中的代碼你可以拷貝粘貼下來進行實驗。
關鍵詞:
OpenCV,Image,imread,imwrite
前 言
目 錄
Contents
讀取圖像
顯示圖像
圖像寫入
總 結
前 言
目 錄
Contents
讀取圖像
顯示圖像
圖像寫入
總 結
本文來自于Read, Display and Write an Image using OpenCV ,對于應用OpenCV完成圖片的讀取、顯示和寫入。
對于圖片讀取、顯示和寫入文件是圖像處理和計算機視覺最基本的操作過程。甚至在對于圖片進行截取、縮放、旋轉以及利用各種濾波器進行處理,你所要做的第一件事情就是從文件中將圖片讀取到計算機內存。所以掌握這項基本的操作非常重要。
OpenCV,作為世界上最大的計算機視覺庫,利用內置的三個函數來完成這些操作。它們分別是:
1. imread() 讀取圖像;
2. imshow() 顯示圖像;
3. imwrite() 將圖像寫入文件;
下面是本文所使用的樣例圖片。
首先,下面的代碼讀取上述文件,并進行顯示。查看代碼是如何包含上述三條函數的。繼續往下處理我們將對應用在代碼中的每個函數進行討論。
# import the cv2 library import cv2 # The function cv2.imread() is used to read an image. img_grayscale = cv2.imread('test.jpg',0) # The function cv2.imshow() is used to display an image in a window. cv2.imshow('graycsale image',img_grayscale) # waitKey() waits for a key press to close the window and 0 specifies indefinite loop cv2.waitKey(0) # cv2.destroyAllWindows() simply destroys all the windows we created. cv2.destroyAllWindows() # The function cv2.imwrite() is used to write an image. cv2.imwrite('grayscale.jpg',img_grayscale)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
讀
取圖片,應用OpenCV中的imread()函數。下面函數調用語法:
imread(filename, flags)
1
它需要了兩個參數:
1. 第一個參數為圖像文件名稱,需要文件的全路徑名稱。
2. 第二個參數說明圖片如何表示。OpenCV提供了幾個對于圖片數據表示的方式,下面三個是最常用的:
* cv2.IMREAD_UNCHANGED or -1
* cv2.IMREAD_GRAYSCALE or 0
* cv2.IMREAD_COLOR or 1
函數缺省的flags的參數為1,也就是將讀取的圖片表示成彩色圖像。你可以使用不同的flags參數來將讀取的圖片數據表示成特殊的格式。下面我們測試一下不同的 flags選項所產生的效果。
在這里需要強調一下,OpenCV表示彩色圖片使用的為BGR格式,而大多數其他計算機視覺庫則使用的RGB格式表示。所以在使用OpenCV配合替他工具包使用的時候,不要忘記將藍色與紅色通道進行交換,這樣才能夠切換到其它圖像處理庫。
下面的代碼中,我們首先讀取了測試圖像,測試上面三種flags選項E對應的情況。
# Read an image img_color = cv2.imread('test.jpg',cv2.IMREAD_COLOR) img_grayscale = cv2.imread('test.jpg',cv2.IMREAD_GRAYSCALE) img_unchanged = cv2.imread('test.jpg',cv2.IMREAD_UNCHANGED)
1
2
3
4
或者
img_color = cv2.imread('test.jpg',1) img_grayscale = cv2.imread('test.jpg',0) img_unchanged = cv2.imread('test.jpg',-1)
1
2
3
在
OpenCV中,使用imshow()函數來顯示圖像。調用語法為:
imshow(window_name, image)
1
這個函數也需要兩個參數:
1. 第一個參數是顯示圖片窗口的名稱;
2. 第二個參數就是需要顯示的圖片數據;
如果顯示多個圖片,你需要為每個圖片顯示的窗口指定新的窗口名稱。
函數 imshow()通常與 waitKey()、distroyAllWindow()/distroyWindow() 函數聯合使用。
函數 waitKey() 用于綁定鍵盤:
它帶有一個數字參數,指明窗口顯示的時間(單位ms);
在等待時間內,用戶輸入任何字符,程序將會立即往下進行;
如果等待參數為0,程序將會無限期等待用戶的輸入字符;
你也可以設定該函數檢測特殊的按鍵操作,比如Q鍵,或者 ESC鍵。然后顯示每個案件特殊的行為;
函數 distroyAllWindows() 將所有顯示圖片所創建的窗口關閉。如果想關閉某個窗口,則需要將該窗口的名稱指定。使用 distroyAllWindows() 也將窗口和圖片從計算機內存清除。下面的代碼演示了函數 imshow()的是如何被用于顯示你讀入的圖片的。
#Displays image inside a window cv2.imshow('color image',img_color) cv2.imshow('grayscale image',img_grayscale) cv2.imshow('unchanged image',img_unchanged) # Waits for a keystroke cv2.waitKey(0) # Destroys all the windows created cv2.destroyAllwindows()
1
2
3
4
5
6
7
8
9
10
下面動圖顯示了整個對于圖片的讀入、顯示、關閉顯示窗口的整個過程。
在下面三個輸出屏幕中,你可以看到:
1. 第一個圖片顯示為彩色;
2. 接下來是灰度圖片;
3. 第三個是圖片的原始格式,在讀取的時候使用參數: cv2.IMREAD_UNCHANGED
下面的動圖顯示了在讀取、顯示圖片過程中沒有應用waitKey()函數。用于圖片顯示的窗口在幾個毫秒內就關閉了,所以在屏幕上并沒有留下圖片窗口。
最
后,我們來討論一下如何把一個圖像寫入、保存在文件目錄中。所使用的函數為 imwrite(),它的語法為:
imwrite(filename, image)
1
1. 第一個參數為文件名稱,這個文件名稱必須包含文件的擴展名,比如 .png,.jpg 等等。OpenCV就是根據文件名稱的擴展名來確定保存文件的格式的。
2. 第二個參數就是你所要保存的圖像數據。 如果圖片成功保存在目錄中的文件,函數返回True。
下面的代碼顯示了保存的過程,這個存盤的過程是很簡單的。只是將帶有正確擴展名稱的文件名輸入正確(帶有想要保存路徑名稱),并且將圖像數據變量輸入,你就完成了圖片的存儲。
cv2.imwrite('grayscale.jpg',img_grayscale)
1
本
文中,你了解了:
imread(), imshow()以及imwrite()等函數用于圖像的讀取、顯示和保存;
waitKey(), destroyAllWindows()函數用于:
在鍵盤操作之后關閉顯示圖像的窗口;
將圖像數據和窗口從內存清除。
對于waitKey()函數建議你多做些實驗,因為它的某些特性比較容易讓人搞混淆。 你對它越熟悉,你就能夠更好的掌握它。對于文中的代碼你可以拷貝粘貼下來進行實驗。
■ 相關文獻鏈接:
Read, Display and Write an Image using OpenCV
● 相關圖表鏈接:
圖1.1 本文所使用的樣例圖片
圖2.1 讀入、顯示、關閉圖片窗口
圖2.2 使用imshow()顯示圖片
圖2.3 使用imshow()顯示的灰度圖片
圖2.4 讀取圖片是使用的參數 cv2.IMREAD_UNCHANGED
圖2.5 在顯示圖片的過程中沒有應用waitKey() 函數
OpenCV
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。