計算機視覺=圖像處理+機器學習。圖像處理技術用於將圖像處理爲適合進入機器學習模型中的輸入,機器學習則負責從圖像中識別出相關的模式。計算機視覺相關的應用很是的多,例如百度識圖、手寫字符識別、車牌識別等等應用。這個領域是應用前景很是火熱的,同時也是研究的熱門方向。隨着機器學習的新領域深度學習的發展,大大促進了計算機圖像識別的效果,所以將來計算機視覺界的發展前景不可估量。html
OpenCV是計算機視覺領域應用最普遍的開源工具包,基於C/C++,支持Linux/Windows/MacOS/Android/iOS,並提供了Python,Matlab和Java等語言的接口,由於其豐富的接口,優秀的性能和商業友好的使用許可,不論是學術界仍是業界中都很是受歡迎。python
OpenCV最先源於Intel公司1998年的一個研究項目,當時在Intel從事計算機視覺的工程師蓋瑞·布拉德斯基(Gary Bradski)訪問一些大學和研究組時發現學生之間實現計算機視覺算法用的都是各自實驗室裏的內部代碼或者庫,這樣新來實驗室的學生就能基於前人寫的基本函數快速上手進行研究。因而OpenCV旨在提供一個用於計算機視覺的科研和商業應用的高性能通用庫。算法
和Python同樣,當前的OpenCV也有兩個大版本,OpenCV2和OpenCV3。相比OpenCV2,OpenCV3提供了更強的功能和更多方便的特性。不過考慮到和深度學習框架的兼容性,以及上手安裝的難度,這部分先以3.31版本爲主進行介紹。網絡
打開連接:https://opencv.org/releases.html框架
根據不一樣的系統下載不一樣的文件,我用的是MacBook,因此選擇IOS pack,下載打開後以下圖機器學習
根據功能和需求的不一樣,OpenCV中的函數接口大致能夠分爲以下部分:ide
core:核心模塊,主要包含了OpenCV中最基本的結構(矩陣,點線和形狀等),以及相關的基礎運算/操做。函數
imgproc:圖像處理模塊,包含和圖像相關的基礎功能(濾波,梯度,改變大小等),以及一些衍生的高級功能(圖像分割,直方圖,形態分析和邊緣/直線提取等)。工具
highgui:提供了用戶界面和文件讀取的基本函數,好比圖像顯示窗口的生成和控制,圖像/視頻文件的IO等。性能
若是不考慮視頻應用,以上三個就是最核心和經常使用的模塊了。針對視頻和一些特別的視覺應用,OpenCV也提供了強勁的支持:
video:用於視頻分析的經常使用功能,好比光流法(Optical Flow)和目標跟蹤等。
calib3d:三維重建,立體視覺和相機標定等的相關功能。
features2d:二維特徵相關的功能,主要是一些不受專利保護的,商業友好的特徵點檢測和匹配等功能,好比ORB特徵。
object:目標檢測模塊,包含級聯分類和Latent SVM
ml:機器學習算法模塊,包含一些視覺中最經常使用的傳統機器學習算法。
flann:最近鄰算法庫,Fast Library for Approximate Nearest Neighbors,用於在多維空間進行聚類和檢索,常常和關鍵點匹配搭配使用。
gpu:包含了一些gpu加速的接口,底層的加速是CUDA實現。
photo:計算攝像學(Computational Photography)相關的接口,固然這只是個名字,其實只有圖像修復和降噪而已。
stitching:圖像拼接模塊,有了它能夠本身生成全景照片。
nonfree:受到專利保護的一些算法,其實就是SIFT和SURF。
contrib:一些實驗性質的算法,考慮在將來版本中加入的。
legacy:字面是遺產,意思就是廢棄的一些接口,保留是考慮到向下兼容。
ocl:利用OpenCL並行加速的一些接口。
superres:超分辨率模塊,其實就是BTV-L1(Biliteral Total Variation – L1 regularization)算法
viz:基礎的3D渲染模塊,其實底層就是著名的3D工具包VTK(Visualization Toolkit)。
從使用的角度來看,和OpenCV2相比,OpenCV3的主要變化是更多的功能和更細化的模塊劃分。
我使用的是Anaconda3 + python3.6 + Tensorflow + opencv3
一、Anaconda的安裝
Mac OS系統:https://blog.csdn.net/ff_smile/article/details/78871294
Window系統:https://jingyan.baidu.com/article/eae078275a31851fec5485b8.html
liunx系統:https://www.jianshu.com/p/03d757283339
Anaconda和包的安裝和使用教程:https://www.cnblogs.com/alummox/p/7887211.html
二、opencv的安裝
Mac安裝(其餘包安裝原理同樣):
其餘系統安裝:https://www.cnblogs.com/minsons/p/7966190.html
import cv2
複製代碼
函數imread從指定文件加載圖像並返回它。若是圖像沒法讀取(因爲文件丟失,權限不當,格式不受支持或格式無效),函數返回一個空矩陣(Mat :: data == NULL)
openCV目前支持的圖片格式
# 一、文件的讀取 二、封裝格式解析 三、數據解碼 四、數據加載
img = cv2.imread('canton.jpg',1)
複製代碼
cv2.imshow('image',img)
# jpg png 一、文件頭 二、文件數據
cv2.waitKey (0)
# waitKey(0),以毫秒爲單位延遲。0是指「永遠」的特殊值
複製代碼
cv2.imwrite('canton01.jpg',img)
複製代碼
True
複製代碼
圖像佔用內存空間的大小:分辨率 * 位深 / 8
分辨率:寬 * 高
位深度:指定圖像中的每一個像素可使用的顏色信息數量。
每一個像素使用的信息位數越多,可用的顏色就越多,顏色表現就更逼真。
例如:
一幅圖像分辨率:1366*768,24位,則其大小計算以下:
大小 = 1366 * 768 * 24 / 8 = 3147264 byte = 3147 KB
cv2.imwrite('canton02.jpg',img,[cv2.IMWRITE_JPEG_QUALITY,50])
# JPG 的數值越低,壓縮比越高,範圍0~100
複製代碼
結果:
True
複製代碼
cv2.imwrite('canton03.png',img,[cv2.IMWRITE_PNG_COMPRESSION,0])
# PNG 的數值越低,壓縮比越低,範圍0~9
複製代碼
結果:
True
複製代碼
(b,g,r) = img[123,100]
print(b,g,r)
複製代碼
結果:
116 129 167
複製代碼
for i in range(1,100):
img[10 +i,100] = (255,0,0)
cv2.imshow('image',img)
cv2.waitKey(0)
複製代碼
本文章,若有侵權,聯繫刪除