OpenCV是一款由Intel公司俄羅斯團隊發起并參與和維護的一個計算機視覺處理開源軟件庫,支持與計算機視覺和機器學習相關的衆多算法,并且正在日益擴展。
1.1 OpenCV的優勢:OpenCV-Python是一個Python綁定庫,旨在解決計算機視覺問題。
Python是一種由Guido van Rossum開發的通用編程語言,它很快就變得非常流行,主要是因為它的簡單性和代碼可讀性。它使程序員能夠用更少的代碼行表達思想,而不會降低可讀性。
與C / C 等語言相比,Python速度較慢。也就是說,Python可以使用C / C 輕松擴展,這使我們可以在C / C 中編寫計算密集型代碼,并創建可用作Python模塊的Python包裝器。這給我們帶來了兩個好處:首先,代碼與原始C / C 代碼一樣快(因為它是在後台工作的實際C 代碼),其次,在Python中編寫代碼比使用C / C 更容易。OpenCV-Python是原始OpenCV C 實現的Python包裝器。
OpenCV-Python使用Numpy,這是一個高度優化的數據庫操作庫,具有MATLAB風格的語法。所有OpenCV數組結構都轉換為Numpy數組。這也使得與使用Numpy的其他庫(如SciPy和matplotlib)集成更容易。
1.3 OpenCV部署方法安裝OpenCV之前需要先安裝numpy, matplotlib。
創建Python虛拟環境cv, 在cv中安裝即可。
先安裝OpenCV-Python, 由于一些經典的算法被申請了版權,新版本有很大的限制,所以選用3.4.3以下的版本
pip install opencv-python==3.4.2.17
現在可以測試下是否安裝成功,運行以下代碼無報錯則說明安裝成功。
import cv2
# 讀一個圖片并進行顯示(圖片路徑需自己指定)
lena=cv2.imread("1.jpg")
cv2.imshow("image",lena)
cv2.waitKey(0)
如果我們要利用SIFT和SURF等進行特征提取時,還需要安裝:
pip install opencv-contrib-python==3.4.2.17
下圖列出了OpenCV中包含的各個模塊:
其中core、highgui、imgproc是最基礎的模塊,該課程主要是圍繞這幾個模塊展開的,分别介紹如下:
對于圖像處理其他更高層次的方向及應用,OpenCV也有相關的模塊實現
這裡我們會給大家介紹如何讀取圖像,如何顯示圖像和如何保存圖像。
(1)讀取圖像
cv.imread()
參數:
import numpy as np
import cv2 as cv
# 以灰度圖的形式讀取圖像
img = cv.imread('messi5.jpg',0)
注意:如果加載的路徑有錯誤,不會報錯,會返回一個None值
(2)顯示圖像
1 . API
cv.imshow()
參數:
注意:在調用顯示圖像的API後,要調用cv.waitKey()給圖像繪制留下時間,否則窗口會出現無響應情況,并且圖像無法顯示出來。
另外我們也可使用matplotlib對圖像進行展示。
# opencv中顯示
cv.imshow('image',img)
cv.waitKey(0)
# matplotlib中展示
plt.imshow(img[:,:,::-1])
(3)保存
cv.imwrite()
參數:
cv.imwrite('messigray.png',img)
繪制直線
cv.line(img,start,end,color,thickness)
參數:
繪制圓形
cv.circle(img,centerpoint, r, color, thickness)
參數:
繪制矩形
cv.rectangle(img,leftupper,rightdown,color,thickness)
參數:
向圖像中添加文字
cv.putText(img,text,station, font, fontsize,color,thickness,cv.LINE_AA)
參數:
效果展示
我們生成一個全黑的圖像,然後在裡面繪制圖像并添加文字
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
# 1 創建一個空白的圖像
img = np.zeros((512,512,3), np.uint8)
# 2 繪制圖形
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv.circle(img,(447,63), 63, (0,0,255), -1)
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
# 3 圖像展示
plt.imshow(img[:,:,::-1])
plt.title('匹配結果'), plt.xticks([]), plt.yticks([])
plt.show()
結果:
2.3 獲取并修改圖像中的像素點
我們可以通過行和列的坐标值獲取該像素點的像素值。對于BGR圖像,它返回一個藍,綠,紅值的數組。對于灰度圖像,僅返回相應的強度值。使用相同的方法對像素值進行修改。
import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg')
# 獲取某個像素點的值
px = img[100,100]
# 僅獲取藍色通道的強度值
blue = img[100,100,0]
# 修改某個位置的像素值
img[100,100] = [255,255,255]
圖像屬性包括行數,列數和通道數,圖像數據類型,像素數等。
2.5 圖像通道的拆分與合并
有時需要在B,G,R通道圖像上單獨工作。在這種情況下,需要将BGR圖像分割為單個通道。或者在其他情況下,可能需要将這些單獨的通道合并到BGR圖像。你可以通過以下方式完成。
# 通道拆分
b,g,r = cv.split(img)
# 通道合并
img = cv.merge((b,g,r))
OpenCV中有150多種顔色空間轉換方法。最廣泛使用的轉換方法有兩種,BGR↔Gray和BGR↔HSV。
API:
cv.cvtColor(input_image,flag)
參數:
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!