一.讀取圖像文件并展示
灰度圖像:
灰度圖需要用 8 位二進制來表示,取值范圍是 0-255。用 0 表示 0(黑色), 用 255 表示 1(白色),取值越大表示該點越亮。
RGB 彩色圖像:
?
RGB 圖像就是一張像素由三個值來表示的圖片,三個值分別表示紅、綠、藍三種 顏色的程度。如果一個像素的紅色程度是 255,其它兩個顏色程度是 0,那么這個像素在我們 看來就是紅色的,通過這三種顏色的搭配,我們可以配出 4294967296 種不同的顏色。
代碼實踐:
demo01_imread.py
import cv2 # opencv的縮寫為cv2,導入opencvimg1 = cv2.imread('lena.png', 0) # flags參數為0,返回灰色圖像
img2 = cv2.imread('lena.png', 1) # flags參數為1,返回彩色圖像
cv2.imshow('灰度圖', img1) # imshow函數現實處理結果
cv2.imshow('彩色圖', img2)
cv2.waitKey(0) # 等待下一次按鍵按下
cv2.imread()函數功能:讀取圖像文件。
?函數原型:cv2.imread(filename,flags=None)
參數定義: 第一個參數 filename,指要加載的圖片路徑。 第二個參數,為載入標識,指定一個加載圖像的顏色類型,默認值為 1。
flags 取值: CV_LOAD_IMAGE_UNCHANGED——等價取值為-1,這個標識在新版本中已被廢置。 CV_LOAD_IMAGE_GRAYSCALE——等價取值為 0,返回灰色圖像。 CV_LOAD_IMAGE_COLOR——等價取值為 1,返回彩色圖像。 CV_LOAD_IMAGE_ANYDEPTH——等價取值為 2,若圖像深度是 16 位或者 32 位,就返回對 應深度,否則,返回 8 位圖像如果輸入有沖突的標志,將采用較小的數字值。
imread()函數載入圖像并展示。
?二.寫入圖像文件信息
demo02_imwrite.py
import cv2 # opencv的縮寫為cv2,導入opencvimg = cv2.imread('lena.png', 0) # flags參數為0,返回灰色圖像
cv2.imshow('灰度圖', img) # imshow函數現實處理結果
cv2.imwrite('lena_gray.png', img) # imwrite寫入讀取到的圖像并命名為lena_gray.png
cv2.waitKey(0) # 等待下一次按鍵按下
cv2.imwrite()函數功能: 寫入圖像文件信息。
函數原型: cv2.imwrite(filename,img,params=None)
參數定義: img_path_name:保存的文件名 img:文件對象 params:特定格式下保存的參數編碼,一般情況下為 None。
三.讀取視頻文件
demo03_VideoCapture.py
import cv2video_capture = cv2.VideoCapture("test.mp4") # 使用VideoCapture函數讀取名為test.mp4的視頻文件
frame_num = video_capture.get(cv2.CAP_PROP_FRAME_COUNT) # 使用video_capture.get函數獲取總幀數
print("總幀數為 %f" % frame_num)
fps = video_capture.get(cv2.CAP_PROP_FPS) # ==>使用video_capture.get函數獲取幀率
print("幀率為 %f" % fps)
width = video_capture.get(cv2.CAP_PROP_FRAME_WIDTH) # ==>使用video_capture.get函數獲取視頻寬度
print("視頻寬度為 %f" % width)
height = video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # ==>使用video_capture.get函數獲取視頻高度
print("視頻高度為 %f" % height)
cv2.VideoCapture() 函數功能:初始化 VideoCapture 類并利用構造函數讀入該視頻的當前幀。
函數原型:cv2.VideoCapture(*args,**kwargs)
參數定義: 一般僅填入一個,即文件名。如果填入整數,則打開對應的捕獲設備 ID。若為 0,則打 開默認攝像頭。
VideoCapture.get 函數功能:返回該視頻的 propld 所指定的屬性。
函數原型:VideoCapture.get(self,propld)
參數定義: propld,為需要讀取的視頻屬性參數位,一般以 cv2.CAP_PROP_ 開頭,部分常用參數如 下表所示:
四.播放視頻文件
demo04_videoplayback.py
import cv2 # opencv的縮寫為cv2,導入opencvcap = cv2.VideoCapture(0) # 使用VideoCapture函數讀取名為test.mp4的視頻文件
fps = cap.get(cv2.CAP_PROP_FPS) # 使用video_capture.get函數獲取幀率
while True: # while循環,能持續播放讀取到的視頻ret, frame = cap.read() # 使用read()函數讀取圖像的幀,一次循環讀取一幀cv2.imshow("video", frame) # 使用imshow()函數對讀取到的幀進行顯示if cv2.waitKey(int(1000 / fps)) & 0xFF == ord('q'): # 設置視頻播放完成和按下q鍵退出break
cap.release() # 釋放cap
cv2.destroyAllWindows() # 關閉窗口,清除程序所占用的內存
python demo04_videoplayback.py 無法播放視頻,待bug。。。?