您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么實現OpenCV入門,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
OpenCV是一個開源庫,最初由Intel開發,它包含了支持計算機視覺和機器學習的便捷方法和函數。
我將全神貫注地學習如何讀取圖像,如何在Jupyter notebook中顯示圖像以及如何檢查和更改其某些屬性。
import cv2 import numpy as np import matplotlib.pyplot as plt
讓我們從.imread開始加載圖片,然后我們可以使用.imshow在新窗口中顯示它。
image = cv2.imread('img.jpg') cv2.imshow('Some title', image) cv2.waitKey(0) cv2.destroyAllWindows()
waitkey和.destroyAllWindows方法對于在不崩潰的情況下運行代碼至關重要。
第一個命令將告訴Jupyter繼續運行該塊,直到按下某個鍵,第二個命令將在最后關閉窗口。
我們還可以嘗試使用Matplotlib.imshow顯示圖像;這樣,它將以內聯方式顯示,而不是在新窗口中顯示。
image = cv2.imread('img.jpg') plt.imshow(image)
看起來很奇怪。顏色都弄亂了。
OpenCV將圖像加載為Numpy數組,并且它們具有三個維度:紅色,綠色和藍色。維度通常稱為通道,它們保存的值介于0到255之間,代表每個像素的顏色強度。
>>> print(type(image)) >>> print(image.shape) <class 'numpy.ndarray'> (776, 960, 3)
也就是說是RGB,對吧?
不是真的。這是BGR,這是同一件事,但順序不同。
Matplotlib使用RGB,這就是為什么我們的圖片看起來很奇怪。這不是問題,因為OpenCV有一些非常方便的方法來轉換顏色。
image = cv2.imread('img.jpg') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image)
太酷了,我們必須使用OpenCV閱讀和顯示圖像,并了解如何將GBR顏色轉換為RGB以與Matplolib內聯顯示它們。
其他顏色格式可以使用OpenCV處理,例如HSV,CMYK等。
由于我們將重復很多次,因此我們創建一個使用Matplotlib進行繪圖的方法。我們可以設置圖的大小并刪除軸以使其更好。
def show(img): fig, ax = plt.subplots(1, figsize=(12,8)) ax.axis('off') plt.imshow(img, cmap='Greys')
請注意,我還將.imshow中的顏色圖定義為“灰色”。當我們繪制RGB圖像時,該參數將被忽略,但是稍后在繪制數組的各個維度時將很有用。現在,讓我們嘗試一下我們的方法。
image = cv2.imread('img2.jpeg') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) show(image)
現在讓我們嘗試將其轉換為灰度然后再轉換為RGB。
image = cv2.imread('img2.jpeg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) image = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB) show(image)
我們可以使用.split獲取顏色的單個數組,然后將圖片與.merge組合在一起。這對于修改,檢查和過濾數組的單個維度非常實用。
例如,我們可以將數組乘以零以將其刪除;
img = cv2.imread('img2.jpeg') B, G, R = cv2.split(img) img = cv2.merge([B*0, G, R*0]) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) show(img)
我們可以增加或減少顏色的強度,或者構建具有相同形狀的新的Numpy數組來替換它,或者你可以考慮使用任何其他方法。
img = cv2.merge([np.ones_like(B)*255, G, R]) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) show(img)
同樣的分割和合并概念也適用于其他格式,如HSV和HSL。
img = cv2.imread('img2.jpeg') img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) H, S, V = cv2.split(img) img = cv2.merge([np.ones_like(H)*30, S+10, V-20]) img = cv2.cvtColor(img, cv2.COLOR_HSV2RGB) show(img)
HSV:色調、飽和度和明度。
這種格式適用于色調,因此很容易過濾顏色——這意味著,我們可以使用角度范圍,而不必計算紅色、綠色和藍色之間的組合范圍。
我們可以用Numpy來定義HSV的上下邊界。應用函數.inRange過濾這些值,并創建一個掩碼。然后,我們可以使用.bitwise_and在飽和狀態下應用這個掩碼,它會使邊界以外的一切都變成零。
換句話說:我們可以過濾一些顏色,然后將其余所有顏色設置為灰度。
# read img and convert to HSV img = cv2.imread('img2.jpeg') img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # split dimensions H, S, V = cv2.split(img) # upper and lower boundaries lower = np.array([80, 0, 0]) upper = np.array([120, 255, 255]) # build mask mask = cv2.inRange(img, lower, upper) # apply mask to saturation S = cv2.bitwise_and(S, S, mask=mask) # assemble image img = cv2.merge([H, S, V]) # convert to RGB and display img = cv2.cvtColor(img, cv2.COLOR_HSV2RGB) show(img)
分割圖像也可以讓我們更容易地檢查它的構圖。
我們可以從RGB繪制顏色,從HSV繪制飽和度,或任何其他我們想要的通道。
img = cv2.imread('img2.jpeg') B, G, R = cv2.split(img) show(B) img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) H, S, V = cv2.split(img) show(S)
使用“灰色”色圖時,值從白色(低)到黑色(高)。
通過查看第一張地圖,我們可以看出,地面上的藍色強度高于建筑物中的藍色強度,并且通過飽和度圖可以看出,滑板周圍的值高于圖像中其他部分的值。
上述內容就是怎么實現OpenCV入門,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。