使用Python OpenCV處理圖像之使用OpenCV獲取並修改圖像的像素值

2021-01-07 python高手養成

前幾篇內容我們學習了使用OpenCV打開顯示、保存圖像的方法使用Python OpenCV處理圖像之圖像文件的打開、顯示和保存操作,我們還使用OpenCV更改了微信頭像一個Pythoner獲取微信國旗頭像的正確途徑,請不要再@微信官方了。在此基礎上了解了OpenCV處理滑鼠鍵盤響應事件的基本方式使用Python OpenCV處理圖像之詳解使用OpenCV處理鍵盤滑鼠事件。

今天,我們帶大家了解下使用OpenCV獲取並修改一幅圖像的像素值。

準備好了嗎?精彩內容馬上開始

打開一幅圖像並獲取圖像信息

import cv2

import numpy as np

img = cv2.imread('test.jpg')

我們可以獲取該圖像的屬性:行,列,通道,圖像數據類型,像素數目等,具體如下。

img.shape:獲取圖像的形狀,返回值是一個包含行數,列數,通道數的元組

img.size:圖像的像素數目,長乘以寬乘以通道數。

img.dtype:圖像的數據類型

實例如下。

獲取圖像的屬性信息

一幅圖像如何表示具體像素值?

圖像表示一幅圖像的像素點

我們來看下圖,它表示了具體圖像的像素值描述方法,以BGR圖像為例。圖下所示。

圖像的像素值數據結構表示

問題來了,對於一幅BGR圖像,如何表示某一點的像素值呢?

比如:img[xp, yp] = [B, G. R],應該是這種形式了,想要更改該像素值,直接給該坐標上面賦值BGR通道的值即可,當然,也可以分開賦值。如下:

img[xp, yp, 0] = B

img[xp, yp, 1] = G

img[xp, yp, 2] = R

分別賦予BGR通道的值即可。灰度圖片使用類似,不再贅述,只是圖像屬性參數不一樣。怎麼樣?是不是很簡單?

有沒有更好的解決方案?

我們知道,今天來講,一幅圖片的像素值是很高的,動輒幾百萬的像素值,通常我們需要修改某一範圍內的像素值,但是,獲取這一範圍的像素值我們使用Python中的列表這一數據結構,並使用for循環語句查找某一像素範圍內的數據是非常低效的。因此,OpenCV提供的一幅圖像的表示方法是以類似numpy中數組的結構。這種數據結構的優點是高效、精準。

有沒有更好的解決方案呢?

對於OpenCV的圖像數據結構,我們通常使用 array.item() 來獲取某一範圍的像素內容並使用array.itemset()設置該像素的信息,比較列表嵌套並使用for循環遍歷,是非常高效的。而且,程序的可讀性會更好。我們來看下面的例子。

import cv2import numpy as np

img=cv2.imread('test.jpg')

# 列印像素點(10,10)的R通道值

print(img.item(10,10,2))

# 設置像素點(10,10)的R通道為110

img.itemset((10,10,2),110)

# 列印像素點(10,10)的R通道值

print(img.item(10,10,2))

上述代碼可以準確獲取某一像素點的顏色數據。

好了,今天的內容就到這裡了,我們主要是學習了利用OpenCV獲取和設置一幅圖像的某一個像素點的顏色數據,甚至可以區分通道來設置。我們知道某一像素點的設置對於動輒幾百萬甚至上億(小米MIX Alpha,據說能拍出這種圖片)像素的圖片的設置來講,是毫無意義的。因此,在使用中我們需要的是能夠設置某一區域的像素點。我們下一篇內容具體來討論。歡迎大家留言討論。

轉載請註明出處,百家號:Python高手養成。

相關焦點

  • Python+OpenCV的基礎圖像處理操作匯總
    圖像處理是對圖像進行的技術操作與分析,比如為了得到增強的圖像或提取一些有用的信息而進行的一系列操作。隨著我們的發展,許多應用程式使用圖像/幀/視頻作為輸入,對它們進行預處理,並將其輸入到設備或軟體或腳本中。圖像處理也可以是娛樂性的,可以用於許多應用。
  • Python 圖像處理 OpenCV (1):入門
    opencv-python 是只包含了主要模塊的包,而 opencv-contrib-python 包含了主要模塊以及一些擴展模塊,帶一些收費或者專利的算法,還有一些比較新的算法的高級版本。安裝的時候選擇自己喜歡的版本裝就好了,命令如下:# opencv-python 安裝命令pip install opencv-python# opencv-contrib-pythonpip install opencv-contrib-python安裝完成後可以通過以下代碼查看安裝的版本信息:
  • 基於opencv 的圖像處理入門教程
    前言雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • 使用Python+OpenCV實現圖像數據採集
    安裝cv2(OpenCV)我們將使用的圖像庫是cv2。因為cv2不能在Kaggle這樣的在線平臺上工作,所以它必須在你的計算機上本地完成。然而,模型的權重仍然可以在Kaggle上進行訓練,以.h5文件的形式下載(基於Keras/TensorFlow)並加載。
  • 手把手教你使用圖像處理利器OpenCV
    我們一開始會討論一些圖像處理,然後繼續探討不同的應用/場景,也就是圖像處理的用武之地。開始吧!什麼是圖像處理?在深入研究圖像處理的方法之前,重要的是要了解什麼是圖像處理,特別是這項技術在處理大量圖片方面的角色。圖像處理完整的說法是「數字圖像處理」,經常使用圖像處理的領域是「計算機視覺」。
  • 基於OpenCV的圖像分割處理!
    它特別適用於目標和背景佔據不同灰度級範圍的圖像。它不僅可以極大的壓縮數據量,而且也大大簡化了分析和處理步驟,因此在很多情況下,是進行圖像分析、特徵提取與模式識別之前的必要的圖像預處理過程。閾值處理是指剔除圖像內像素值高於閾值或者低於閾值得像素點。例如,設定閾值為127,將圖像內所有像素值大於127的像素點的值設為255;將圖像內所有像素值小於127的像素點的值設為0。
  • opencv-python圖像預處理-濾波
    為了消除外界環境對圖像採集的幹擾,增強圖像的邊緣及灰度跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。使用的方法可以分為空間域處理和頻率域處理兩類。空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。
  • opencv-python獲取圖像:面向對象與面向過程
    獲取圖像的方式有:1,讀取本地圖片,2,調用筆記本自帶攝像頭或usb攝像頭,3,調用網絡攝像頭。讀取圖片學過數字圖像處理的小夥伴應該很熟悉,在數字圖像處理課上,這是一張標準的測試圖片。Lena圖像在科研領域流行的原因:1.該圖適度的混合了細節、平滑區域、陰影和紋理,從而能很好的測試各種圖像處理算法。2.Lenna是個美女,對於圖像處理界的研究者(大部分都是男性)來說,美女圖可以有效地吸引他們來做研究。
  • OpenCV-Python 圖像平滑|十六
    目標學會:使用各種低通濾鏡模糊圖像將定製的濾鏡應用於圖像(2D卷積)2D卷積(圖像過濾)與一維信號一樣,還可以使用各種低通濾波器(LPF),高通濾波器(HPF)等對圖像進行濾波。LPF有助於消除噪聲,使圖像模糊等。
  • 使用Python OpenCV處理圖像之圖像感興趣的區域(ROI)獲取
    上幾篇的內容我們學習了Python使用OpenCV處理圖像滑鼠及鍵盤事件的基礎方法使用Python OpenCV處理圖像之詳解使用OpenCV處理鍵盤滑鼠事件及圖像像素點內容的獲取和設置使用Python OpenCV處理圖像之使用OpenCV獲取並修改圖像的像素值。
  • 使用Python+OpenCV進行圖像處理之入門教程
    它在計算機視覺和圖像處理中起著重要作用,用於實時操作,其效率足以滿足工業上的要求。OpenCV可以與其他庫一起使用,比如Numpy,這使得Python能夠處理OpenCV數組結構。實現我們的第一個濾波器檢測邏輯計算機不能像人類一樣識別物體,為了能讓計算機達到這個目的,我們可以使用各種技術來讓計算機理解圖像,我們會將顏色作為檢測物體的主要依據。
  • 使用Python+OpenCV實現神經網絡預處理人臉圖像的快速指南
    注意:本文中使用的所有靜態圖像都來自 https://imgflip.com/memetemplates圖片載入我們將使用imread()函數加載圖像,指定文件的路徑和mode,第二個參數對於動態運行通道和像素轉換非常重要。
  • 基於 opencv 的圖像處理入門教程
    雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • Python下opencv使用筆記(一:簡單操作與幾何變換)
    ,包括常見的圖像處理方法,濾波算法,等等,了解常見的操作,方便後續的進一步處理,這裡搬運過來,方便視覺領域的初學者可以參考。最後索性找到了一個集成的軟體,就是把常用的包都加進去了的python,軟體是Ipython,是一個集成的科學計算軟體,裡面集成了許多包,並且是一個神似matlab的軟體,有調試,測試,觀看變量數值等等許多相同的地方,所以如果你是想研究這樣面而又苦惱安裝包的話,就下載個這個安裝起來吧。關於python下使用opencv讀取圖像。
  • opencv學習—03圖像運算(一)
    在灰度圖像中,像素用8bit(1個字節)來表示,像素值的範圍是[0,255]。兩個像素值進行加法運算時求得的和可能超過255,不同的加法運算對超過255數值的處理方式不一樣。使用加法運算符「+」對圖像a(像素值為a)和圖像b(像素值為b)進行求和運算時,遵循以下規則:a + b >255:a+b=mod(a+b,256)mod( )是取模運算,"mod(a+b,256)"表示計算"a+b的和除以
  • [Python圖像處理] 一.圖像處理基礎知識及OpenCV入門函數
    圖像通常分為二值圖像、灰度圖像和彩色圖像,下圖展示了圖像處理經典「Lena」圖的各種圖像。本文主要使用Python和OpenCV進行講解,首先調用"pip install opencv-python"安裝OpenCV庫,如下圖所示:
  • 「python opencv視覺零到實戰」八、圖片選區操作
    一、學習目標了解什麼是ROI了解floodFill的使用方法如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 【數字圖像處理系列五】圖像濾波之空間濾波:圖像平滑降噪和圖像銳化
    python版本:python3.5.4 ; opencv-python版本:opencv-python3.4.2.17使用的開發環境是
  • 「Python+cv2」Python安裝opencv及圖像的基本操作
    Python環境opencv的安裝1、檢查是否安裝python環境3、安裝opencvpython環境下opencv的安裝:pip3 install opencv-pythonpython opencv安裝因為我已經安裝,所以會出現安裝位置的提示。
  • python利用opencv實現證件照換底
    opencv今天就給大家介紹一下python利用opencv庫進行藍底換紅底或者白底照片的操作。1.強大的opencv庫說到圖像處理,不得不提opencv庫。它是一個跨平臺的計算機視覺庫,可以運行在不同作業系統上,它由一些列c函數和少量c++函數組成,並提供python,matlab等語言的接口,實現了圖像處理和計算機視覺方面的很多通用算法。我們這裡用的opencv-python 就是opencv的python API接口。