本篇文章為大家展示了怎么實(shí)現(xiàn)OpenCV入門,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
作為一家“創(chuàng)意+整合+營銷”的成都網(wǎng)站建設(shè)機(jī)構(gòu),我們在業(yè)內(nèi)良好的客戶口碑。創(chuàng)新互聯(lián)提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、創(chuàng)意表現(xiàn)、網(wǎng)頁制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營銷運(yùn)營等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營模式與有效的網(wǎng)絡(luò)營銷方法,創(chuàng)造更大的價(jià)值。
OpenCV是一個(gè)開源庫,最初由Intel開發(fā),它包含了支持計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的便捷方法和函數(shù)。
我將全神貫注地學(xué)習(xí)如何讀取圖像,如何在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方法對于在不崩潰的情況下運(yùn)行代碼至關(guān)重要。
第一個(gè)命令將告訴Jupyter繼續(xù)運(yùn)行該塊,直到按下某個(gè)鍵,第二個(gè)命令將在最后關(guān)閉窗口。
我們還可以嘗試使用Matplotlib.imshow顯示圖像;這樣,它將以內(nèi)聯(lián)方式顯示,而不是在新窗口中顯示。
image = cv2.imread('img.jpg') plt.imshow(image)
看起來很奇怪。顏色都弄亂了。
OpenCV將圖像加載為Numpy數(shù)組,并且它們具有三個(gè)維度:紅色,綠色和藍(lán)色。維度通常稱為通道,它們保存的值介于0到255之間,代表每個(gè)像素的顏色強(qiáng)度。
>>> print(type(image)) >>> print(image.shape) <class 'numpy.ndarray'> (776, 960, 3)
也就是說是RGB,對吧?
不是真的。這是BGR,這是同一件事,但順序不同。
Matplotlib使用RGB,這就是為什么我們的圖片看起來很奇怪。這不是問題,因?yàn)镺penCV有一些非常方便的方法來轉(zhuǎn)換顏色。
image = cv2.imread('img.jpg') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) plt.imshow(image)
太酷了,我們必須使用OpenCV閱讀和顯示圖像,并了解如何將GBR顏色轉(zhuǎn)換為RGB以與Matplolib內(nèi)聯(lián)顯示它們。
其他顏色格式可以使用OpenCV處理,例如HSV,CMYK等。
由于我們將重復(fù)很多次,因此我們創(chuàng)建一個(gè)使用Matplotlib進(jìn)行繪圖的方法。我們可以設(shè)置圖的大小并刪除軸以使其更好。
def show(img): fig, ax = plt.subplots(1, figsize=(12,8)) ax.axis('off') plt.imshow(img, cmap='Greys')
請注意,我還將.imshow中的顏色圖定義為“灰色”。當(dāng)我們繪制RGB圖像時(shí),該參數(shù)將被忽略,但是稍后在繪制數(shù)組的各個(gè)維度時(shí)將很有用?,F(xiàn)在,讓我們嘗試一下我們的方法。
image = cv2.imread('img2.jpeg') image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) show(image)
現(xiàn)在讓我們嘗試將其轉(zhuǎn)換為灰度然后再轉(zhuǎn)換為RGB。
image = cv2.imread('img2.jpeg') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) image = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB) show(image)
我們可以使用.split獲取顏色的單個(gè)數(shù)組,然后將圖片與.merge組合在一起。這對于修改,檢查和過濾數(shù)組的單個(gè)維度非常實(shí)用。
例如,我們可以將數(shù)組乘以零以將其刪除;
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)
我們可以增加或減少顏色的強(qiáng)度,或者構(gòu)建具有相同形狀的新的Numpy數(shù)組來替換它,或者你可以考慮使用任何其他方法。
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:色調(diào)、飽和度和明度。
這種格式適用于色調(diào),因此很容易過濾顏色——這意味著,我們可以使用角度范圍,而不必計(jì)算紅色、綠色和藍(lán)色之間的組合范圍。
我們可以用Numpy來定義HSV的上下邊界。應(yīng)用函數(shù).inRange過濾這些值,并創(chuàng)建一個(gè)掩碼。然后,我們可以使用.bitwise_and在飽和狀態(tài)下應(yīng)用這個(gè)掩碼,它會使邊界以外的一切都變成零。
換句話說:我們可以過濾一些顏色,然后將其余所有顏色設(shè)置為灰度。
# 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)
分割圖像也可以讓我們更容易地檢查它的構(gòu)圖。
我們可以從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)
使用“灰色”色圖時(shí),值從白色(低)到黑色(高)。
通過查看第一張地圖,我們可以看出,地面上的藍(lán)色強(qiáng)度高于建筑物中的藍(lán)色強(qiáng)度,并且通過飽和度圖可以看出,滑板周圍的值高于圖像中其他部分的值。
上述內(nèi)容就是怎么實(shí)現(xiàn)OpenCV入門,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當(dāng)前標(biāo)題:怎么實(shí)現(xiàn)OpenCV入門
鏈接地址:http://www.rwnh.cn/article24/jispce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、用戶體驗(yàn)、網(wǎng)站維護(hù)、建站公司、網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)