c语言opencv所用库函数,Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略...
## 關于OpenCV簡介 ##
OpenCV是一個基于BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。 OpenCV用C++語言編寫,它的主要接口也是C++語言,但是依然保留了大量的C語言接口。
在計算機視覺項目的開發中,OpenCV作為較大眾的開源庫,擁有了豐富的常用圖像處理函數庫,采用C/C++語言編寫,可以運行在Linux/Windows/Mac等操作系統上,能夠快速的實現一些圖像處理和識別的任務。此外,OpenCV還提供了Java、python、cuda等的使用接口、機器學習的基礎算法調用,從而使得圖像處理和圖像分析變得更加易于上手,讓開發人員更多的精力花在算法的設計上。
## OpenCV應用領域 ##
### 1、計算機視覺領域方向 ###
* 1、人機互動
* 2、物體識別
* 3、圖像分割
* 4、人臉識別
* 5、動作識別
* 6、運動跟蹤
* 7、機器人
* 8、運動分析
* 9、機器視覺
* 10、結構分析
* 11、汽車安全駕駛
### 2、計算機操作底層技術 ###
1. 圖像數據的操作:?分配、釋放、復制、設置和轉換。 圖像是視頻的輸入輸出I/O ,文件與攝像頭的輸入、圖像和視頻文件輸出)。
2. ?矩陣和向量的操作以及線性代數的算法程序:矩陣積、解方程、特征值以及奇異值等。
3. 各種動態數據結構:列表、隊列、集合、樹、圖等。
4. 基本的數字圖像處理:濾波、邊緣檢測、角點檢測、采樣與差值、色彩轉換、形態操作、直方圖、圖像金字塔等。
5. 結構分析:連接部件、輪廓處理、距離變換、各自距計算、模板匹配、Hough變換、多邊形逼近、直線擬合、橢圓擬合、Delaunay 三角劃分等。
6. 攝像頭定標:發現與跟蹤定標模式、定標、基本矩陣估計、齊次矩陣估計、立體對應。
7. 運動分析:光流、運動分割、跟蹤。
8. 目標識別:特征法、隱馬爾可夫模型:HMM。
9. 基本的GUI:圖像與視頻顯示、鍵盤和鼠標事件處理、滾動條。
10. 圖像標注:線、二次曲線、多邊形、畫文字。
## 安裝OpenCV的的兩種方法 ##
1、幾點注意事項:
* 安裝的時候是 opencv\_python,但在導入的時候采用 import cv2。
* 因為OpenCV依賴一些庫,可以在本博客中查找一些依賴庫的安裝方法,例如安裝Numpy方法等,本博客應有盡有!
### T1、使用whl文件法 ###
先去官網[https://www.lfd.uci.edu/~gohlke/pythonlibs/\#opencv][https_www.lfd.uci.edu_gohlke_pythonlibs_opencv],下載相應Python版本的OpenCV的whl文件,如本人下載的opencv\_python?3.4.1?cp36?cp36m?win\_amd64.whl,然后在whl文件所在目錄下,命令 進行安裝即可
pip install opencv\_python?3.4.1?cp36?cp36m?win\_amd64.whl
![70][]
![70 1][]
### T2、直接命令法 ? ###
pip install opencv-python
![70 2][]
最后,檢測安裝情況
![70 3][]
哈哈,大功告成!
### T3、Anaconda 環境下安裝 ###
pip install?opencv-python? ? ? //Anaconda 環境下安裝,先打開Anaconda Prompt,再輸入本命令進行安裝!
![20191219124852141.png][]
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly95dW55YW5pdS5ibG9nLmNzZG4ubmV0_size_16_color_FFFFFF_t_70][]
20191128更新記錄
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly95dW55YW5pdS5ibG9nLmNzZG4ubmV0_size_16_color_FFFFFF_t_70 1][]
## OpenCV常見函數、方法 ##
[Welcome to OpenCV-Python Tutorials’s documentation!][Welcome to OpenCV-Python Tutorials_s documentation]
### 0、基本庫函數 ###
**cv2.imread(filepath,flags)?**? ?\#讀入一張圖像
* filepath:要讀入圖片的完整路徑
* flags:讀入圖片的標志
* cv2.IMREAD\_COLOR:默認參數,讀入一副彩色圖片,忽略alpha通道
* cv2.IMREAD\_GRAYSCALE:讀入灰度圖片
* cv2.IMREAD\_UNCHANGED:顧名思義,讀入完整圖片,包括alpha通道
**cv2.imshow(wname,img)**? ? ?\#顯示圖像
* 第一個參數是顯示圖像的窗口的名字
* 第二個參數是要顯示的圖像(imread讀入的圖像),窗口大小自動調整為圖片大小
cv2.imshow( 'image',img)
cv2.waitKey( 0) #等待鍵盤輸入,單位為毫秒,即等待指定的毫秒數看是否有鍵盤輸入,若在等待時間內按下任意鍵則返回按鍵的ASCII碼,程序繼續運行。
#若沒有按下任何鍵,超時后返回-1。參數為0表示無限等待。不調用waitKey的話,窗口會一閃而逝,看不到顯示的圖片。
cv2.destroyAllWindow() #銷毀所有窗口
cv2.destroyWindow(wname) #銷毀指定窗口
**cv2.imwrite(file,img,num)?** ***?***?\#保存一張圖像
* 第一個參數是要保存的文件名
* 第二個參數是要保存的圖像。可選的第三個參數,它針對特定的格式:對于JPEG,其表示的是圖像的質量,用0 - 100的整數表示,默認95。
* 第三個參數表示的是壓縮級別。默認為3.
**img.copy()**? ? \#圖像復制
**cv2.cvtColor()? ? ?** \#圖像顏色空間轉換
* **img2 = cv2.cvtColor(img,cv2.COLOR\_RGB2GRAY)** ? \#灰度化:彩色圖像轉為灰度圖像
* **img3 = cv2.cvtColor(img,cv2.COLOR\_GRAY2RGB)** ? \#彩色化:灰度圖像轉為彩色圖像
* \# cv2.COLOR\_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS
**cv2.resize(image, image2,dsize)** ? ? \#圖像縮放:(輸入原始圖像,輸出新圖像,圖像的大小)
**cv2.flip(img,flipcode)?** ***??***? ? ? ? ? ? ? ? ? ?\#圖像翻轉,flipcode控制翻轉效果。
* flipcode = 0:沿x軸翻轉;flipcode > 0:沿y軸翻轉;flipcode < 0:x,y軸同時翻轉
**cv2.warpAffine**(img, M, (400, 600))? ? ? ?\#圖像仿射變換 :平移;裁剪、剪切、旋轉、仿射變換,
M、M\_crop、M\_shear、M\_rotate
**cv2.putText(img,'text',(50,150) ?** \#圖像添加文字:(照片,添加的文字,左上角坐標,字體,字體大小,顏色,字體粗細)
cv2.putText(image, caption, (b[ 0], b[ 1] - 10), cv2.FONT_HERSHEY_PLAIN, 1, ( 255, 0, 0), 1)
cv2.putText(I, 'there 0 error(s):',( 50, 150),cv2.FONT_HERSHEY_COMPLEX, 6,( 0, 0, 255), 25)
**cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)?** ? \#畫出矩行:img原圖、(x,y)是矩陣的左上點坐標、(x+w,y+h)是矩陣的右下點坐標、(0,255,0)是畫線對應的rgb顏色、2是所畫的線的寬度。
**cv2.boundingRect(img) ?** ? ? ? ?\#返回圖像的四值屬性:img是一個二值圖,即是它的參數; 返回四個值,分別是x,y,w,h; x,y是矩陣左上點的坐標,w,h是矩陣的寬和高。
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly95dW55YW5pdS5ibG9nLmNzZG4ubmV0_size_16_color_FFFFFF_t_70 2][]
### 1、圖像基本運算 ###
圖像的基本運算有很多種,比如兩幅圖像可以相加、相減、相乘、相除、位運算、平方根、對數、絕對值等;圖像也可以放大、縮小、旋轉,還可以截取其中的一部分作為ROI(感興趣區域)進行操作,各個顏色通道還可以分別提取及對各個顏色通道進行各種運算操作。
bitwise\_and、bitwise\_or、bitwise\_xor、bitwise\_not四個按位操作函數,是將基礎數學運算應用于圖像像素的處理中。
bitwise_and、bitwise_or、bitwise_xor、bitwise_not這四個按位操作函數。
void bitwise_and(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray()); //dst = src1 & src2
void bitwise_or(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray()); //dst = src1 | src2
void bitwise_xor(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray()); //dst = src1 ^ src2
void bitwise_not(InputArray src, OutputArray dst,InputArray mask=noArray()); //dst = ~src
* ***bitwise\_and()***:是對二進制數據進行“與”操作,即對圖像(灰度圖像或彩色圖像均可)每個像素值進行二進制“與”操作,1&1=1,1&0=0,0&1=0,0&0=0
* ***bitwise\_or()***:是對二進制數據進行“或”操作,即對圖像(灰度圖像或彩色圖像均可)每個像素值進行二進制“或”操作,1|1=1,1|0=0,0|1=0,0|0=0
* ***bitwise\_xor()***:是對二進制數據進行“異或”操作,即對圖像(灰度圖像或彩色圖像均可)每個像素值進行二進制“異或”操作,1^1=0,1^0=1,0^1=1,0^0=0
* ***bitwise\_not()***:是對二進制數據進行“非”操作,即對圖像(灰度圖像或彩色圖像均可)每個像素值進行二進制“非”操作,~1=0,~0=1
### 2、Image.open 和cv2.imread 的區別及其轉換 ###
Image.open?打開來的圖像格式,cv2.imread? 讀出來是像素格式。
# 1、PIL.Image轉換成OpenCV格式:
import cv2
from PIL import Image
import numpy
path = 'F:/File_Python/Resources/face_images/LZT01.jpg'
img = Image.open(path).convert( "RGB") #.convert("RGB")可不要,默認打開就是RGB
img.show()
#轉opencv
#img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
img = cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR)
cv2.imshow( "OpenCV",img)
cv2.waitKey()
# 2、OpenCV轉換成PIL.Image格式
import cv2
from PIL import Image
import numpy
img = cv2.imread( 'F:/File_Python/Resources/face_images/LZT01.jpg') # opencv打開的是BRG
cv2.imshow( "OpenCV",img)
image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
image.show()
cv2.waitKey()
[https_www.lfd.uci.edu_gohlke_pythonlibs_opencv]: https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
[70]: /images/1611458276687.png
[70 1]: /images/1611458251935.png
[70 2]: /images/1611458221995.png
[70 3]: /images/1611458198271.png
[20191219124852141.png]: /images/1611458172026.png
[watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly95dW55YW5pdS5ibG9nLmNzZG4ubmV0_size_16_color_FFFFFF_t_70]: /images/1611458149151.png
[watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly95dW55YW5pdS5ibG9nLmNzZG4ubmV0_size_16_color_FFFFFF_t_70 1]: /images/1611458101553.png
[Welcome to OpenCV-Python Tutorials_s documentation]: https://opencv-python-tutroals.readthedocs.io/en/latest/index.html
[watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly95dW55YW5pdS5ibG9nLmNzZG4ubmV0_size_16_color_FFFFFF_t_70 2]: /images/1611457947545.png
總結
以上是生活随笔為你收集整理的c语言opencv所用库函数,Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 昨天买一箱饮料今天过期可以退吗?
- 下一篇: Android8.1 ifw方案,And