在Ubuntu開發OpenCV Python程式
Ubuntu安裝python2的OpenCV套件
sudo apt-get install python-numpy python-opencv
顯示test.jpg圖片,如果有參數,就用參數上的圖片
#!/usr/bin/python
import sys
import os.path
import cv2
if __name__ == '__main__':
win_name = "Image Window"
img_path = "test.jpg"
argc = len(sys.argv)
if argc > 1:
img_path = sys.argv[1]
if not os.path.exists(img_path):
print 'File not found, path=\'', img_path, '\''
quit(-1)
print 'Show the image in the path=\'', img_path, '\''
img = cv2.imread(img_path)
if img is None:
print 'Not supported image type!'
quit(-1)
cv2.namedWindow(win_name)
cv2.imshow(win_name, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
OpenCV的imread有第2的參數是指定讀取圖檔的方式,預設是讀取成彩色圖
要指定讀取成彩色圖,會獲得img的Type會是三個Channel的CV_8UC3
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
讀取成灰階圖,彩色圖片會自動被轉換成灰階圖,並Type會是單Channel的CV_8U
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
讀取原始,如果要使用png和tiff的Alpha層資料就需要用下面這參數
img = cv2.imread(img_path, cv2.IMREAD_UNCHANGED)
另外還有我沒測試過的參數
cv2.IMREAD_ANYCOLOR | cv2.IMREAD_ANYDEPTH
讀取圖檔後測試type
print 'test type(img)=', type(img)
我們將得到
test type(img)=
表示img後續的操作,大部份可以套用numpy套件來處理
print 'test type(img)=', type(img)
print 'test image.shape=', img.shape
print ' image.size=', img.size
print ' image.dtype=', img.dtype
print ' image.ndim=', img.ndim
print ' image.strides=', img.strides
print ' type(image.shape)=', type(img.shape)
for d in range(0, img.ndim):
print ' dim(', d, ')=', (img.shape[d])
參考資料: 基本的numpy資訊
在imshow之前寫的namedWindow函數就算拿掉,整個小程式還是會做事情,不過你會發現有時無法做大小的調整,並且在你寫一個小程式使用多個Window時,你無法指定所想要繪製的Window,所以我們還是會加上namedWindow來指定名稱和設定視窗屬性,例如預設是用WINDOW_AUTOSIZE,不讓使用者改變視窗大小,如果圖片大於電腦螢幕可容許的範圍,會被縮小處理
cv2.namedWindow(win_name, cv2.WINDOW_AUTOSIZE)
WINDOW_NORMAL可以讓使用者改變視窗,不過預設的大小不見得會是圖片本來的大小
cv2.namedWindow(win_name, cv2.WINDOW_NORMAL)
最後的destroyAllWindows是在整個程式結束前關閉所有視窗,如果只是要關閉某一個視窗,只需要
指定window名稱呼叫cv2.destroyWindow(win_name)
參考資料:
留言