wdcp裝wordpress502小時(shí)seo
前言
一、圖像入門(mén)
1.1 讀取圖像cv.imread()
1.2 數(shù)組數(shù)據(jù)轉(zhuǎn)換cv.cvtColor()?
1.3數(shù)據(jù)窗口展示
1.4圖像保存
1.5圖像的截取
?1.6 圖像的比例縮放
二、視頻入門(mén)
參考文獻(xiàn)
前言
OpenCV 于 1999 年由 Gary Bradsky 在英特爾創(chuàng)立,第一個(gè)版本于 2000 年問(wèn)世。Vadim Pisarevsky 加入了 Gary Bradsky,負(fù)責(zé)管理英特爾的俄羅斯軟件 OpenCV 團(tuán)隊(duì)。2005 年,OpenCV 被用于 Stanley ,這輛車(chē)贏(yíng)得了 2005 年美國(guó)穿越沙漠 DARPA 機(jī)器人挑戰(zhàn)大賽。后來(lái),在 Willow Garage 的支持下,在 Gary Bradsky 和 Vadim Pisarevsky 主導(dǎo)下,OpenCV 項(xiàng)目的開(kāi)發(fā)工作變得活躍起來(lái)。OpenCV 現(xiàn)在支持與計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)相關(guān)的眾多算法,并且每天都在拓展中。
OpenCV 支持各種編程語(yǔ)言,如 C++,Python,Java 等,可在不同的平臺(tái)上使用,包括 Windows,Linux,OS X,Android 和 iOS?;?CUDA 和 OpenCL 的高速 GPU 操作接口也在積極開(kāi)發(fā)中。OpenCV-Python 是 OpenCV 的 Python API,結(jié)合了 OpenCV C++ API 和 Python 語(yǔ)言的最佳特性。
OpenCV-Python 是一個(gè) Python 綁定庫(kù),旨在解決計(jì)算機(jī)視覺(jué)問(wèn)題。
Python 是一種由 Guido van Rossum 開(kāi)發(fā)的通用編程語(yǔ)言,它很快就變得非常流行,主要是因?yàn)樗暮?jiǎn)單性和代碼可讀性。它使程序員能夠用更少的代碼表達(dá)思想,而不會(huì)降低可讀性。
與 C/C++ 這類(lèi)語(yǔ)言相比,Python 的速度更慢。好在,可以使用 C/C++ 輕松的拓展 Python ,我們可以在 C/C++ 中編寫(xiě)計(jì)算密集型代碼,并用 Python 來(lái)封裝。這給我們帶來(lái)了兩個(gè)好處:首先,代碼像原始的 C/C++ 代碼一樣快(因?yàn)楹笈_(tái)實(shí)際上就是 C/C++ 代碼在工作),其次,在 Python 中編寫(xiě)代碼比在 C/C++ 中更容易。OpenCV-Python 就是 OpenCV C++ 的 Python 封裝。
OpenCV-Python 使用了 Numpy,這是一個(gè)有著 MATLAB 風(fēng)格語(yǔ)法,高度優(yōu)化的用于數(shù)值計(jì)算的庫(kù)。所有 OpenCV 數(shù)組結(jié)構(gòu)都與 Numpy 數(shù)組進(jìn)行轉(zhuǎn)換。這也使得與使用 Numpy 的其他庫(kù)(如 SciPy 和 Matplotlib)集成更容易。
一、圖像入門(mén)
????????都知道一張圖片是由很多個(gè)像素點(diǎn)組成,對(duì)于計(jì)算機(jī)而言,最終呈現(xiàn)在用戶(hù)面前的是由每個(gè)像素點(diǎn)的值所決定(0~255),0對(duì)應(yīng)黑色,255對(duì)應(yīng)白色。我們?cè)谏钪型ǔ=佑|的都是彩色圖片,由RGB三通道共同構(gòu)成一張上面的彩色圖片,每一個(gè)通道對(duì)應(yīng)的像素值反映出其亮度(三個(gè)通道可以理解成三個(gè)矩陣)。而灰度圖像通常只有一個(gè)顏色通道來(lái)表現(xiàn)。
- 在這里,你將學(xué)習(xí)如何讀取圖像、如何顯示圖像以及如何將其保存起來(lái)
- 你要學(xué)習(xí)這些函數(shù):cv.imread()、cv.imshow()、cv.imwrite()
- 您還可以選擇學(xué)習(xí)如何使用 Matplotlib 顯示圖像。
1.1 讀取圖像cv.imread()
使用?cv.imread()?函數(shù)讀取一張圖像,圖片應(yīng)該在工作目錄中,或者應(yīng)該提供完整的圖像路徑。
第二個(gè)參數(shù)是一個(gè) flag,指定了應(yīng)該讀取圖像的方式
- cv.IMREAD_COLOR:加載彩色圖像,任何圖像的透明度都會(huì)被忽略,它是默認(rèn)標(biāo)志
- cv.IMREAD_GRAYSCALE:以灰度模式加載圖像
- cv.IMREAD_UNCHANGED:加載圖像,包括 alpha 通道
Note
- 你可以簡(jiǎn)單地分別傳遞整數(shù) 1、0 或-1,而不是這三個(gè) flag。
讀取圖片的代碼如下所示:
import numpy as np
import cv2 as cv
# 用灰度模式加載圖像
img = cv.imread('images/demo2.png', 0)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()
?
1.2 數(shù)組數(shù)據(jù)轉(zhuǎn)換cv.cvtColor()?
import numpy as np
import cv2 as cv
# 用灰度模式加載圖像
img_BGR = cv.imread('images/demo2.png')
img = cv.cvtColor(img_BGR,cv.COLOR_BGR2GRAY) #將其轉(zhuǎn)換為灰度的二維數(shù)組數(shù)據(jù)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()
1.3數(shù)據(jù)窗口展示
img = cv2.imread("cat.jpg")cv2.imshow("IMage",img)
cv2.waitKey(0) # 按任意鍵關(guān)閉窗口,cv2.waitKey(1000) 延時(shí)一秒關(guān)閉窗口
cv2.destroyAllWindows()
1.4圖像保存
cv2.imwrite("mycat.jpg",img)
1.5圖像的截取
# 其實(shí)本質(zhì)就是對(duì)np數(shù)組進(jìn)行操作
img = cv2.imread("cat.jpg")
cv2.imshow("IMage",img[:100,:200]) # 取前100行,前200列的像素作為圖像展示
?1.6 圖像的比例縮放
img_cat = cv2.imread("cat.jpg")ret = cv2.resize(img_cat,(0,0),fx=3,fy=1) #橫向拉長(zhǎng)三倍
ret2 = cv2.resize(img_cat,(0,0),fx=3,fy=3) #圖片擴(kuò)大三倍
二、視頻入門(mén)
- 學(xué)習(xí)加載視頻、顯示視頻和保存視頻。
- 學(xué)習(xí)用相機(jī)捕捉并顯示。
- 你要學(xué)習(xí)這些函數(shù):cv.VideoCapture(),cv.VideoWriter()
通常,我們用相機(jī)捕捉直播。OpenCV 為此提供了一個(gè)非常簡(jiǎn)單的接口。我們用相機(jī)捕捉一個(gè)視頻(我用的電腦內(nèi)置攝像頭),將它轉(zhuǎn)換成灰度視頻并顯示。僅僅是一個(gè)簡(jiǎn)單的開(kāi)始。去獲取一個(gè)視頻,你需要?jiǎng)?chuàng)建一個(gè)VideoCapture對(duì)象。它的參數(shù)可以是設(shè)備索引或者一個(gè)視頻文件名。設(shè)備索引僅僅是攝像機(jī)編號(hào)。通常會(huì)連接一臺(tái)攝像機(jī)(as in my case)。所以我只傳了 0(或者-1)。你可以通過(guò)傳 1 來(lái)選擇第二個(gè)攝像機(jī),以此類(lèi)推。之后,你能逐幀捕獲。但是最后,不要忘記釋放這個(gè) Capture 對(duì)象。
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
while(True):# 一幀一幀捕捉ret, frame = cap.read()# 我們對(duì)幀的操作在這里gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# 顯示返回的每幀cv.imshow('frame',gray)if cv.waitKey(1) & 0xFF == ord('q'):break
# 當(dāng)所有事完成,釋放 VideoCapture 對(duì)象
cap.release()
cv.destroyAllWindows()
Note
- 確保 ffmpeg 和 gstreamer 安裝合適的版本。有時(shí),使用 Video Capture 是比較頭痛的,主要是因?yàn)殄e(cuò)誤的安裝 ffmpeg 或 gstreamer。
保存視頻
我們捕獲視頻,逐幀處理然后保存下來(lái)。對(duì)于圖像來(lái)說(shuō),是非常的簡(jiǎn)單,就用?cv.imwrite()。這里需要做更多的工作。
這次我們創(chuàng)建一個(gè)?VideoWriter?對(duì)象。我們應(yīng)該指定輸出文件的名字 (例如:output.avi)。然后我們應(yīng)該指定?FourCC?碼 (下一段有介紹)。然后應(yīng)該傳遞每秒幀數(shù)和幀大小。最后一個(gè)是?isColor?flag。如果是 True,編碼器期望彩色幀,否則它適用于灰度幀。
FourCC?是用于指定視頻解碼器的 4 字節(jié)代碼。這里?fourcc.org?是可用編碼的列表。它取決于平臺(tái),下面編碼就很好。
- In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID 是最合適的. MJPG 結(jié)果比較大. X264 結(jié)果比較小)
- In Windows: DIVX (還需要測(cè)試和添加跟多內(nèi)容)
- In OSX: MJPG (.mp4), DIVX (.avi), X264 (.mkv).
對(duì)于 MJPG, FourCC 的代碼作為?cv.VideoWriter_fourcc(‘M’,’J’,’P’,’G’)?或?cv.VideoWriter_fourcc(*’MJPG’)?傳遞。
下面的代碼從相機(jī)捕獲,在垂直方向翻轉(zhuǎn)每一幀然后保存它。
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
# 聲明編碼器和創(chuàng)建 VideoWrite 對(duì)象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):ret, frame = cap.read()if ret==True:frame = cv.flip(frame,1)# 寫(xiě)入已經(jīng)翻轉(zhuǎn)好的幀out.write(frame)cv.imshow('frame',frame)if cv.waitKey(1) & 0xFF == ord('q'):breakelse:break
# 釋放已經(jīng)完成的工作
cap.release()
out.release()
cv.destroyAllWindows()
參考文獻(xiàn)
1. 簡(jiǎn)介 - OpenCV-Python 教程簡(jiǎn)介 - 《OpenCV 中文文檔 4.0.0》 - 書(shū)棧網(wǎng) · BookStack
opencv——基礎(chǔ)篇 - 小可愛(ài)真是太好了 - 博客園