電氣人學opencv Day1(圖片與視頻的讀取及可能出現的問題)
在學習opencv之前,首先應該選擇語言,在我的認知里c++與python是最合適的兩種,由于個人的學習原因選擇了python,所以以下所有的程式都是python實作,但其實c++也是大同小異,
python中opencv的安裝
python編譯器我選擇了實用性較強的pycharm,這個直接在官網上下載社區版就行了,足夠學習使用,

庫的安裝推薦anaconda,在這里面可以搭建自己的環境,并在相應環境中下載自己所需的庫,很是方便,下載同樣只需要百度搜素就行,但可能比較慢,
打開后在not installed里面搜索opencv,點擊下載就行,
(也不知道創始人啥愛好,anaconda和python都是蟒蛇的意思)
這里建議除了安裝opencv外還應安裝numpy
讀取圖片
1.在匯入opencv的時候實際上應該是:
import cv2
這里的 ‘2’ 并非代表版本,而是表示我們的opencv是基于c++ API,為了保持向后兼容性才這么命名,
2.匯入之后我們就可以使用opencv的許多自帶函式實作一些內容了,這里的影像匯入就有相應的函式:
img = cv.imread(filename, flags )
filename指的是匯入圖片的地址,推薦使用絕對路徑(在圖片——屬性——安全里可以找到)
但復制得到的地址大都是單右線,比如這樣:C:\Users\1\PycharmProjects\text\1.jpg
但這樣就容易出問題:

原因是單右線與某些字母組合可能會被誤識別成某些特殊意義的符號,所以我們這里可以把所有的單右線改成雙右線或者左線,比如我這樣:

(按理說直接讀取檔案名也沒有問題,比如1.jpg,可一旦有重名的就會報錯,所以穩妥起見我還是用的路徑)
flag表示讀取影像的方式,在檔案中有:
不填flag時就直接讀取原影像
3.讀取影像后應該先創建視窗再顯示影像,同樣,都有相應的函式:
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
image表示視窗名稱,后面的引數可以讓你自由調節視窗大小
cv2.imshow('image', img)
注意顯示函式’ '里面的名臣一定要與創建的視窗名稱一致,后面是圖片
4.最后不要忘了加上等待函式,不然圖片將會一閃而逝
cv2.waitKey(0)
這里引數為0表示按任意鍵停止等待,若為1000則表示圖片
釋放視窗是個好習慣
cv2.destroyAllWindows()
5.完整代碼如下:
import cv2
import numpy as np
img = cv2.imread('C:\\Users\\1\\PycharmProjects\\text\\1.jpg')
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', img)
cv2.waitKey(0)
cv.destroyAllWindows()
讀取視頻
其實讀取視頻的思路與圖片類似,因為視頻實質上就是一幀一幀的圖片,所以我們需要先讀取視頻:
cap = cv2.VideoCapture('1.mp4')
再對每一幀影像進行上述處理就行了,這里同樣有一些可以直接用的函式,可以去參考檔案2中了解一下
完整代碼:
import cv2
cap = cv2.VideoCapture('C:\\Users\\1\\PycharmProjects\\text\\2.mp4')
while(True):
ret, frame = cap.read()
cv2.namedWindow('frame', 0)
cv2.imshow('frame', frame)
if cv2.waitKey(0) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
ret是表示cap.read函式是否有回傳的布林值,注意必須有兩個引數,不然會報錯,這個函式的作用其實就是讀取每一幀影像,
后面的if陳述句表示如果按鍵值等于’q’的ASCII值時,退出while回圈
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298752.html
標籤:其他
