0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

高級OpenCV:BGR像素強度圖

微云疏影 ? 來源:磐創(chuàng)AI ? 作者:磐創(chuàng)AI ? 2022-08-09 10:58 ? 次閱讀

介紹

到目前為止,在我們的高級 OpenCV 教程中,我們已經(jīng):

理解對比度的概念。

了解直方圖均衡的概念。

在灰度圖像上實施對比度增強。

繪制灰度圖像的像素直方圖。

然而,眾所周知,我們的世界由很多很多顏色組成。現(xiàn)在我們將嘗試分析彩色圖像的對比度和像素強度,即存在顏色通道的圖像。

了解彩色圖像

如果你閱讀過我們之前的文章,沒記錯的話,我們了解了高級 OpenCV 使用 BGR 顏色通道,而不是 RGB。你會發(fā)現(xiàn)紅色和藍(lán)色通道已被交換。

如上圖所示,有很多顏色既醒目又吸引眼球。這些不同色調(diào)的顏色是混合顏色通道的結(jié)果。

此圖像中存在三個顏色通道:

藍(lán)色

綠色

紅色

正是通過這些顏色的混合,才能出現(xiàn)屬于色譜的二次色和許多其他顏色。

poYBAGLxzUOASh8MAADaPWAt45o547.jpg

獲得圖像洞察力

第一步也是最重要的一步是將必要的包導(dǎo)入到我們的 python 腳本中,然后我們將圖像加載到我們的系統(tǒng) RAM 中。這將使用通過 OpenCV 包提供的 imread() 方法來完成:

import cv2

import numpy as np

from matplotlib import pyplot as plt

img = cv2.imread('C:/Users/Shivek/Pictures/Picture1.jpg')

上述代碼塊的輸出將顯示如下:

pYYBAGLxzUWAQv50AAl18qBccsk717.jpg

正如人們可能觀察到的那樣,圖像太大而無法在我的屏幕上以全尺寸顯示。但是,我們不會減小圖像的大小。這是因為我們想深入了解像素的屬性和相關(guān)信息。

首先,讓我們查看 Image 的形狀(NumPy 數(shù)組):

print(image.shape)

上述代碼行的輸出將顯示如下:

在仔細(xì)檢查這一信息元組后,將按如下方式對其進行解密:

poYBAGLxzUWAfbmfAAAOSowDu9A492.jpg

顏色通道是BGR-NOT RGB。接下來,讓我們查看圖像的大小——大小告訴我們構(gòu)成整個圖像的像素總數(shù)。

print(image.size)

輸出:

6912000

我們的圖像中有超過 600 萬像素。

讓我們查看圖像中的第一個像素。這是第一行第一列中的像素。

print(image[0][0])

pYYBAGLxzUWAaE1fAAAINMxQCbc297.jpg

它的 BGR 值分別為 22、15 和 6。

現(xiàn)在我們繼續(xù):BGR 像素計數(shù)圖。

BGR 像素強度線圖

由于我們圖像中的每個像素都包含 3 個顏色通道,因此我們將需要遍歷所有像素 3 次,每次分別從 B、G 和 R 通道中挑選出值。要執(zhí)行此操作,可以將 for 循環(huán)與 enumerate() 函數(shù)結(jié)合使用。

我們可能已經(jīng)知道, enumerate() 函數(shù)將允許我們遍歷固定數(shù)量的元素,并自動記錄每個元素的數(shù)量。

我們將使用 MatPlotLib 包以折線圖的形式獲得像素強度和計數(shù)的視覺效果。

colors = ('blue','green','red')

label = ("Blue", "Green", "Red")

for count,color in enumerate(colors):

histogram = cv2.calcHist([image],[count],None,[256],[0,256])

plt.plot(histogram,color = color, label=label[count]+str(" Pixels"))

上述代碼塊的逐行解釋如下:

在下面的代碼行中,我們創(chuàng)建了一個元組,其中包含圖形三個不同線條的顏色。由于有 3 次迭代,每次迭代都會選擇不同的顏色,因此我們可以在圖表上看到 BGR 模式。

顏色=('藍(lán)色','綠色','紅色')

此后,我們繼續(xù)創(chuàng)建一個元組,其中包含圖表圖例的相應(yīng)標(biāo)簽。同樣,在每次迭代時,將選擇一個標(biāo)簽來標(biāo)記圖形的相應(yīng)顏色。這些標(biāo)簽將包含在圖表的圖例中,我們將在后面的代碼行中看到。

label = ("Blue", "Green", "Red")

為了便于圖形生成,我們有一個 for-enumerate 循環(huán),該循環(huán)將被執(zhí)行以從像素數(shù)組和元組中選擇每個所需項目,在這些項目上,它們將在同一畫布上繪制為折線圖。

for count,color in enumerate(colors):

histogram = cv2.calcHist([image],[count],None,[256],[0,256])

plt.plot(histogram,color = color, label=label[count]+str(" Pixels"))

for循環(huán)中的代碼行如下所示:

histogram = cv2.calcHist([image],[count],None,[256],[0,256])

我們將使用 OpenCV 包中的 calcHist() 方法,該方法將獲得像素強度的直方圖,正如我們在之前的文章中所了解的那樣。我們傳入以下參數(shù)

poYBAGLxzUWAak-JAAAduzPX_5s904.jpg

為了繪制圖形,我們使用 MatPlotLib 包提供的 plot() 方法,如下所示:

plt.plot(histogram, color=color, label=label[count]+str(" Pixels"))

我們傳入要繪制的數(shù)據(jù),然后是適當(dāng)?shù)念伾?。為圖指定一個標(biāo)簽,并根據(jù)for循環(huán)迭代索引元組中的相應(yīng)標(biāo)簽。我們將“像素”附加到標(biāo)簽名稱中,以使查看者清楚地看到完成的圖形。

在將圖表顯示給最終用戶之前,我們在圖表中添加了一些元素,例如:

標(biāo)題。

Y 軸的標(biāo)簽。

X 軸的標(biāo)簽。

一個圖例。

為了結(jié)束處理,我們使用 MatPlotLib 包提供的 show() 方法在屏幕上顯示視覺效果。

plt.title("Histogram Showing Number Of Pixels Belonging To Respective Pixel Intensity", color="crimson")
plt.ylabel("Number Of Pixels", color="crimson")
plt.xlabel("Pixel Intensity", color="crimson")
plt.legend(numpoints=1, loc="best")
plt.show()

最終的 BGR 像素強度線圖將如下所示:

pYYBAGLxzUWAKfrBAAB3Lc0W5hQ869.jpg

上面的可視化顯示并準(zhǔn)確地告訴我們像素在原始彩色圖像中是如何分布的。構(gòu)成我們圖像的 600 萬+ 像素的位置可以概括在上面的線圖中。

我們的大部分像素都位于圖像的左側(cè),從圖中可以看出,圖像的中間到右側(cè)是藍(lán)色的,如藍(lán)色像素強度線所示。藍(lán)色像素強度線在這些區(qū)域中占主導(dǎo)地位 - 如果人們查看圖像,是這樣的:

poYBAGLxzUaAEQdoAAuyoBi--_8752.jpg

請注意完整圖像如何適合我的計算機屏幕 - 這是因為我調(diào)整了它的大小。

一個非常有趣的事實是,雖然我已經(jīng)調(diào)整了圖像的大小,但如果我要在調(diào)整大小的圖像上創(chuàng)建一個像素強度圖,那么與原始圖像相比,BGR 圖的梯度并沒有任何不同——它只是縮小了大小或“規(guī)模”。

結(jié)論

在本文中,我們研究了:

· 在 Python 編程語言中使用 OpenCV 理解彩色圖像

· BGR 顏色通道

· 使用 Python 中的 MatPlotLib 包將 BGR 像素映射到 BGR 像素強度線圖

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1075

    瀏覽量

    40278
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61973
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41091
收藏 人收藏

    評論

    相關(guān)推薦

    請問LABVIEW是否可以繪制如附件圖片中所示的矢量強度

    請問LABVIEW是否可以繪制如附件圖片中所示的矢量強度,用顏色代表不同像素點矢量的大小,圖上的箭頭顯示像素點上矢量的方向?
    發(fā)表于 12-16 00:19

    如何使用Python中的OpenCV模塊檢測顏色

    numpy然后,導(dǎo)入模塊。讀取圖像并使用 OpenCV 模塊中的 cvtColor() 函數(shù)將BGR圖像轉(zhuǎn)換為 HSV (色調(diào)、飽和度、值) 圖像,現(xiàn)在,選擇我們想要檢測的顏色,并使用如下所示
    發(fā)表于 02-09 16:31

    iTOP-3568開發(fā)板使用OpenCV處理圖像-顏色轉(zhuǎn)換

    的源文件 code,轉(zhuǎn)換的色彩空間,在 opencv 中有超過 150 種顏色空間轉(zhuǎn)換方法,但是經(jīng)常用的只有 BGR-灰度BGR-HSV BG
    發(fā)表于 08-14 10:46

    OpenCV中的BGR格式,在libyuv中對應(yīng)的那個格式?OpenCV中的RGB格式呢?

    OpenCV中的BGR格式,在libyuv中對應(yīng)的那個格式?OpenCV中的RGB格式呢?
    發(fā)表于 09-19 06:00

    遍歷圖像像素的14種方法_OpenCV2版書本配套示例程序24

    遍歷圖像像素的14種方法_OpenCV2版書本配套示例程序24,來自一本國外OpenCV2書籍的示例-遍歷圖像像素的14種方法。
    發(fā)表于 06-06 15:20 ?0次下載

    像素級角點檢測_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:亞像素級角點檢測
    發(fā)表于 06-06 15:52 ?5次下載

    用迭代器訪問像素_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:用迭代器訪問像素
    發(fā)表于 06-06 15:52 ?2次下載

    用指針訪問像素_《OpenCV3編程入門》書本配套源代碼

    OpenCV3編程入門》書本配套源代碼:用指針訪問像素
    發(fā)表于 06-06 15:54 ?9次下載

    像素級角點檢測_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-亞像素級角點檢測,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 16:55 ?1次下載

    遍歷圖像像素的14種方法_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-遍歷圖像像素的14種方法,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:02 ?4次下載

    用動態(tài)地址計算配合at訪問像素_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-用動態(tài)地址計算配合at訪問像素,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:02 ?0次下載

    用指針訪問像素_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-用指針訪問像素,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:02 ?2次下載

    用迭代器訪問像素_OpenCV3編程入門-源碼例程

    OpenCV3編程入門-源碼例程全集-用迭代器訪問像素,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-18 17:02 ?2次下載

    如何使用OpenCV訪問Mat圖像中每個像素的值

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用OpenCV訪問Mat圖像中每個像素的值
    發(fā)表于 11-26 16:13 ?4次下載

    為什么OpenCV使用BGR顏色格式?

    OpenCV 是一個非常有用的庫,但是說到最小意外原則,它就是一場不合格的災(zāi)難。當(dāng)我在 MATLAB 中編寫計算機視覺代碼時,我很少參考文檔。在使用 OpenCV 時,我在瀏覽器選項卡中永久打開了文檔。
    的頭像 發(fā)表于 12-16 14:57 ?642次閱讀