python+OpenCV的圖像基本操作
一、計算機如何識別圖像
不知道大家有沒有感覺,有時在手機上看到的圖片有很多小點,圖像不夠清晰;或者把圖片放大,你會發現越放大,也會看到很多小點。
我們先看一張彩色圖像,這是一張路飛的圖片:
原因是:
一張出現在屏幕上的圖片是由無數個像素點組成的,分辨率越高,圖片越不清晰,分辨率越低,圖片越清晰。
無數個小點放在同一個平面上機會組成一幅我們所看到的圖像。
計算機十九通過這些像素點來識別不同的圖像,像素點的值在0到255之間。像素點越大,圖片就越亮;像素點越小,圖片就越暗。
如何識別彩色和黑色圖片:
一張彩色的圖片是有顏色通道的,由紅色(R)、綠色(G)、藍色(B)組成。
所以一張黑白圖是沒有顏色通道的。
二、圖片的讀取與顯示
1 #所需要的庫
2 import cv2 as cv 3 import matplotlib.pyplot as plt
1 #讀取圖片cv2.imread("圖片路徑")
2 img=cv.imread('lufei.jpg')
1 #圖像的顯示 cv2.imshow(圖片展示窗口的名字,設置的讀取的圖像的參數)
2 cv.imshow("image",img) 3 #等待時間,以毫秒為單位,若將代碼中的0改為1000,圖像顯示1s就會自動退出窗口
4 # 0代表任意鍵退出窗口
5 cv.waitKey(0) 6 cv.destroyAllWindows()
代碼中寫有詳細解釋,請仔細閱讀
運行代碼出來的結果:
若需要寫很多圖像的項目時,可將顯示的代碼放在一個函數中,便於調用:
1 def cv_show(name,img): 2 cv.imshow(name,img) 3 cv.waitKey(0) 4 cv.destroyAllWindows()
三、視頻的讀取與顯示
視頻是由一張一張圖片組成的,所以讀取視頻就相當於讀取很多張圖片,然后將其連起來
cv2.VideoCapture可以捕獲攝像頭,用數字控制不同的設備,如果是視頻文件,直接寫好視頻路徑就好。
1 #讀取視頻文件 2 video=cv.VideoCapture("iu1.mp4")
1 #判斷是否成功讀取 2 if video.isOpened(): 3 open,frame=video.read() 4 else: 5 open=False
1 #利用while循環一幀一幀的對視頻進行讀取 2 while open: 3 ret,frame=video.read() 4 if frame is None: 5 break 6 if ret ==True: 7 #轉換每一幀的顏色,這里是將每一幀裝為灰度圖 8 gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY) 9 cv.imshow("iu1new.mp4",gray) 10 #每一幀等待時間 11 if cv.waitKey(10) %0xFF==27: 12 break 13 video.release() 14 cv.destroyAllWindows()
運行結果就不展示出來了,大家可以找一個視頻去運行代碼試試。
四、部分圖像的截取
cv_show()函數是自己編寫用於顯示圖片的函數,代碼已經放在第一部分了。
img[h,w]表示圖像的高度和寬度。
1 img=cv.imread("lufei.jpg") 2 lufei=img[0:200,0:200] 3 cv_show("lufei",lufei)
運行結果: