溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么實(shí)現(xiàn)OpenCV入門(mén)

發(fā)布時(shí)間:2021-12-15 18:03:26 來(lái)源:億速云 閱讀:167 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了怎么實(shí)現(xiàn)OpenCV入門(mén),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

OpenCV

OpenCV是一個(gè)開(kāi)源庫(kù),最初由Intel開(kāi)發(fā),它包含了支持計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)的便捷方法和函數(shù)。

我將全神貫注地學(xué)習(xí)如何讀取圖像,如何在Jupyter notebook中顯示圖像以及如何檢查和更改其某些屬性。

import cv2
import numpy as np
import matplotlib.pyplot as plt

讓我們從.imread開(kāi)始加載圖片,然后我們可以使用.imshow在新窗口中顯示它。

image = cv2.imread('img.jpg')
cv2.imshow('Some title', image)

cv2.waitKey(0)
cv2.destroyAllWindows()

怎么實(shí)現(xiàn)OpenCV入門(mén)

waitkey和.destroyAllWindows方法對(duì)于在不崩潰的情況下運(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)

怎么實(shí)現(xiàn)OpenCV入門(mén)

看起來(lái)很奇怪。顏色都弄亂了。

OpenCV將圖像加載為Numpy數(shù)組,并且它們具有三個(gè)維度:紅色,綠色和藍(lán)色。維度通常稱為通道,它們保存的值介于0到255之間,代表每個(gè)像素的顏色強(qiáng)度。

>>> print(type(image))
>>> print(image.shape)

<class 'numpy.ndarray'>
(776, 960, 3)

也就是說(shuō)是RGB,對(duì)吧?

不是真的。這是BGR,這是同一件事,但順序不同。

Matplotlib使用RGB,這就是為什么我們的圖片看起來(lái)很奇怪。這不是問(wèn)題,因?yàn)镺penCV有一些非常方便的方法來(lái)轉(zhuǎn)換顏色。

image = cv2.imread('img.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

plt.imshow(image)

怎么實(shí)現(xiàn)OpenCV入門(mén)

太酷了,我們必須使用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')

請(qǐng)注意,我還將.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)

怎么實(shí)現(xiàn)OpenCV入門(mén)

現(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)

怎么實(shí)現(xiàn)OpenCV入門(mén)

我們可以使用.split獲取顏色的單個(gè)數(shù)組,然后將圖片與.merge組合在一起。這對(duì)于修改,檢查和過(guò)濾數(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)

怎么實(shí)現(xiàn)OpenCV入門(mén)

我們可以增加或減少顏色的強(qiáng)度,或者構(gòu)建具有相同形狀的新的Numpy數(shù)組來(lái)替換它,或者你可以考慮使用任何其他方法。

img = cv2.merge([np.ones_like(B)*255, G, R])

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
show(img)

怎么實(shí)現(xiàn)OpenCV入門(mén)

同樣的分割和合并概念也適用于其他格式,如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)

怎么實(shí)現(xiàn)OpenCV入門(mén)

HSV:色調(diào)、飽和度和明度。

這種格式適用于色調(diào),因此很容易過(guò)濾顏色——這意味著,我們可以使用角度范圍,而不必計(jì)算紅色、綠色和藍(lán)色之間的組合范圍。

怎么實(shí)現(xiàn)OpenCV入門(mén)

我們可以用Numpy來(lái)定義HSV的上下邊界。應(yīng)用函數(shù).inRange過(guò)濾這些值,并創(chuàng)建一個(gè)掩碼。然后,我們可以使用.bitwise_and在飽和狀態(tài)下應(yīng)用這個(gè)掩碼,它會(huì)使邊界以外的一切都變成零。

換句話說(shuō):我們可以過(guò)濾一些顏色,然后將其余所有顏色設(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)

怎么實(shí)現(xiàn)OpenCV入門(mén)

分割圖像也可以讓我們更容易地檢查它的構(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í)現(xiàn)OpenCV入門(mén)

使用“灰色”色圖時(shí),值從白色(低)到黑色(高)。

通過(guò)查看第一張地圖,我們可以看出,地面上的藍(lán)色強(qiáng)度高于建筑物中的藍(lán)色強(qiáng)度,并且通過(guò)飽和度圖可以看出,滑板周圍的值高于圖像中其他部分的值。

上述內(nèi)容就是怎么實(shí)現(xiàn)OpenCV入門(mén),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI