詳解在OpenCV中如何使用圖像像素

像素是計(jì)算機(jī)視覺中圖像的重要屬性。它們是表示圖像中特定空間中光的顏色強(qiáng)度的數(shù)值,是圖像中數(shù)據(jù)的最小單位。
圖像中的像素總數(shù)是高度、寬度和通道的乘積。
由于OpenCV中的圖像被讀取為像素值的Numpy數(shù)組,因此可以使用數(shù)組切片操作獲取并處理由該區(qū)域的像素表示的圖像區(qū)域。
切片操作用于檢索序列子集,如列表、元組和數(shù)組,因此可用于獲取圖像區(qū)域的像素值,以便進(jìn)行編輯、格式化或裁剪等處理。
切片操作
腳本:使用切片操作獲取列表的子集。
# 切片字母列表
letters = ['a', 'b', 'c', 'd', 'e']
# 頭三個(gè)字母
first_three = letters[:3]
# 最后三個(gè)字母
last_three = letters[-3:]
# 得到第二個(gè)到第四個(gè)字母
second_to_fourth = letters[1:4]
# 顯示結(jié)果
print('First three letters: ', first_three)
print('Last three letters: ', last_three)
print('Second to fourth letters: ', second_to_fourth)
請(qǐng)注意,我使用索引值對(duì)字母列表進(jìn)行切片。例如,傳遞起始索引1(列表中第二個(gè)字母的索引)和4將返回列表的一個(gè)片段,從第二個(gè)值到第四個(gè)值。
由于索引值用于以這種方式檢索子集,因此它們也用于定位和檢索圖像中感興趣的區(qū)域。
以圖像中的區(qū)域?yàn)槟繕?biāo)的切片由圖像的兩個(gè)軸(水平(X)和垂直(Y))的起始值和結(jié)束值定義,格式如下:
image[startY: endY, startx:endX]
它返回所需感興趣區(qū)域的(圖像像素的)Numpy數(shù)組。
那么,我們?nèi)绾未_定感興趣區(qū)域的X軸和Y軸的起始值和結(jié)束值?
這些值(startX、endX、startY、endY)是映射出感興趣區(qū)域的坐標(biāo)值。
使用OpenCV顯示時(shí),這些值不會(huì)顯示在圖像旁邊,但我們可以使用其他應(yīng)用程序(如Photoshop、Corel Draw、Paint e.t.c)或其他python可視化庫(kù)(如Matplotlib)來(lái)顯示具有X和Y坐標(biāo)值的圖像。
一如既往,這在實(shí)踐中得到了更好的理解。讓我們使用matplotlib顯示一個(gè)圖像。pyplot,我們可以從中檢索坐標(biāo),這些坐標(biāo)映射出圖像中的目標(biāo)感興趣區(qū)域。
我用加納共和國(guó)國(guó)旗的圖像來(lái)證明這一點(diǎn)。在這里,我的目標(biāo)是圖像中圍繞黑星的區(qū)域。
獲取感興趣區(qū)域的坐標(biāo)值
使用Matplotlib加載并顯示圖像
# 導(dǎo)入matplotlib的plot
import matplotlib.pyplot as plt
# 加載和顯示原始圖像
image = plt.imread('Flag_of_Ghana.png')
# 顯示圖片
plt.imshow("Original", image)
plt.plot()
輸出:加載的圖像及其X和Y坐標(biāo)。

正如你所看到的,plt.imshow函數(shù)返回讀取的圖像以及x和y軸的坐標(biāo)值。
然后,我們可以檢索感興趣區(qū)域(黑星)的起始和結(jié)束坐標(biāo)值。
追蹤黑星區(qū)域的坐標(biāo)值

這幅圖像顯示了如何追蹤黑星周圍區(qū)域的坐標(biāo)。
我們可以從圖像中檢索坐標(biāo)(startY(y1)、endY(y2)、startX(x1)、endX(x2))。然后,我們可以定義兩個(gè)軸的起點(diǎn)和終點(diǎn)坐標(biāo),并裁剪為:
image[y1: y2, x1:x2]
if we get y1, y2 = [145, 295] and x1, x2 = [245, 400]
那么繪制出黑星的區(qū)域?qū)⑹牵?/p>
black_star = image[145:295, 245:400]
這將返回映射感興趣區(qū)域(本例中為黑星)的像素值(在Numpy數(shù)組中)。
現(xiàn)在,我們可以利用這種技術(shù)對(duì)圖像區(qū)域進(jìn)行定位和切片,以進(jìn)行各種圖像處理。
使用切片操作裁剪圖像
1.加載并顯示原始圖像
# 導(dǎo)入matplotlib的plot
import matplotlib.pyplot as plt
# 加載和顯示原始圖像
image = plt.imread('Flag_of_Ghana.png')
# 顯示圖片
plt.imshow("Original", image)
plt.plot()
輸出:顯示加載的圖像。

2.獲取圖像的空間維度
# 獲取圖像的空間尺寸
# 初始化
originY, originX = 0, 0
# 獲取圖像的高度和寬度
height, width = image.shape[:2]
# 計(jì)算圖像的中心
(centerX, centerY) = (width // 2, height // 2)
print('Image height: ', height)
print('Image width: ', width)
print('Center location: ', (centerY, centerX))輸出:顯示圖像的空間尺寸。

3.裁剪圖像
裁剪出圖像的左上角
# 裁剪圖像的左上角
# 高度從原點(diǎn)到中心
# 寬度從原點(diǎn)到中心
top_left = image[originY:centerY, originX:centerX]
cv2.imshow("Top-Left Corner", top_left)
cv2.waitKey(0)
輸出:圖像的左上角

裁剪出圖像的右上角
# 裁剪右上角
# 高度從原點(diǎn)到中心
# 寬度從中心到右上角(寬度)
top_right = image[originY:centerY, centerX:width]
cv2.imshow("Top-Right Corner", top_right)
cv2.waitKey(0)
輸出:圖像的右上角

裁剪出圖像的左下角
# 裁剪左下角
# 高度從中心到左下角(高度)
# 寬度從中心到右上角(寬度)
bottom_left = image[centerY:height, originX:centerX]
cv2.imshow("Bottom-Left Corner", bottom_left)
cv2.waitKey(0)
輸出:圖像的左下角

裁剪出圖像的右下角
# 裁剪右下角
# 高度從中心到左下角(高度)
# 寬度從中心到右上角(寬度)
bottom_right = image[centerY:height, centerX:width]
cv2.imshow("Bottom-Right Corner", bottom_right)
cv2.waitKey(0)
輸出:左下角。

4.使用尺寸將部分圖像設(shè)置為特定顏色。
# 設(shè)置原始圖像的左上角為綠色
image[originY:centerY, originX:centerX] = (0, 255, 0)
# 顯示更新后的圖像
cv2.imshow("Updated", image)
cv2.waitKey(0)
輸出:將左上角設(shè)置為綠色

總結(jié)
圖像像素是表示圖像中顏色強(qiáng)度的數(shù)值。使用OpenCV獲取和設(shè)置不同圖像處理的圖像像素的過程基于Numpy陣列的切片操作。切片像素值在裁剪、重置、復(fù)制或增強(qiáng)圖像時(shí)非常有用。
以上就是詳解在OpenCV中如何使用圖像像素的詳細(xì)內(nèi)容,更多關(guān)于OpenCV圖像像素的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用IPython調(diào)試debug程序
這篇文章主要為大家介紹了python使用IPython調(diào)試debug程序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Pycharm運(yùn)行時(shí)總是跳出Python?Console問題
這篇文章主要介紹了Pycharm運(yùn)行時(shí)總是跳出Python?Console問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
舉例區(qū)分Python中的淺復(fù)制與深復(fù)制
這篇文章主要介紹了舉例區(qū)分Python中的淺復(fù)制與深復(fù)制,是Python入門學(xué)習(xí)中的重要知識(shí),需要的朋友可以參考下2015-07-07
Python列表創(chuàng)建與銷毀及緩存池機(jī)制
這篇文章主要介紹了Python列表創(chuàng)建與銷毀及緩存池機(jī)制,文章基于python展開對(duì)列表創(chuàng)建與銷毀內(nèi)容的展開,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
Python+Selenium實(shí)現(xiàn)短視頻自動(dòng)上傳與發(fā)布的實(shí)踐
本文主要介紹了Python+Selenium實(shí)現(xiàn)短視頻自動(dòng)上傳與發(fā)布的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Python?SDK實(shí)現(xiàn)私服上傳下載的示例
本文主要介紹了Python?SDK實(shí)現(xiàn)私服上傳下載的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>2021-11-11
Python實(shí)現(xiàn)的括號(hào)匹配判斷功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的括號(hào)匹配判斷功能,涉及Python棧與列表的存儲(chǔ)、遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2018-08-08

