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

2020-12-03 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高手養成。

相關焦點

  • 基於opencv 的圖像處理入門教程
    前言雖然計算機視覺領域目前基本是以深度學習算法為主,但實際上很多時候對圖片的很多處理方法,並不需要採用深度學習的網絡模型,採用目前成熟的圖像處理庫即可實現,比如 OpenCV 和 PIL ,對圖片進行簡單的調整大小、裁剪、旋轉,或者是對圖片的模糊操作。
  • opencv-python圖像預處理-濾波
    為了消除外界環境對圖像採集的幹擾,增強圖像的邊緣及灰度跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。使用的方法可以分為空間域處理和頻率域處理兩類。空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。
  • opencv-python獲取圖像:面向對象與面向過程
    獲取圖像的方式有:1,讀取本地圖片,2,調用筆記本自帶攝像頭或usb攝像頭,3,調用網絡攝像頭。讀取圖片學過數字圖像處理的小夥伴應該很熟悉,在數字圖像處理課上,這是一張標準的測試圖片。Lena圖像在科研領域流行的原因:1.該圖適度的混合了細節、平滑區域、陰影和紋理,從而能很好的測試各種圖像處理算法。2.Lenna是個美女,對於圖像處理界的研究者(大部分都是男性)來說,美女圖可以有效地吸引他們來做研究。
  • 使用Python OpenCV處理圖像之圖像感興趣的區域(ROI)獲取
    上幾篇的內容我們學習了Python使用OpenCV處理圖像滑鼠及鍵盤事件的基礎方法使用Python OpenCV處理圖像之詳解使用OpenCV處理鍵盤滑鼠事件及圖像像素點內容的獲取和設置使用Python OpenCV處理圖像之使用OpenCV獲取並修改圖像的像素值。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    utm_source=blog&utm_medium=vehicle-detection-opencv-python)目錄視頻中運動目標檢測的思想視頻中目標檢測的真實世界用例視頻目標檢測的基本概念 幀差分 圖像閾值 檢測輪廓 圖像膨脹利用OpenCV構建車輛檢測系統視頻中運動目標檢測的思想目標檢測是計算機視覺中一個引人入勝的領域。
  • 「python opencv視覺零到實戰」八、圖片選區操作
    一、學習目標了解什麼是ROI了解floodFill的使用方法如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 【數字圖像處理系列五】圖像濾波之空間濾波:圖像平滑降噪和圖像銳化
    python版本:python3.5.4 ; opencv-python版本:opencv-python3.4.2.17
  • 「python opencv視覺零基礎」十四、直方圖反向投影
    前文提醒:博主正在參加博客之星評比,成功入選Top200,現在暫居第九歡迎各位點擊了解更多幫我投票,非常感謝~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 基於OpenCv 和 Python 的手指識別及追蹤
    使用閾值處理和濾波技術來進行背景消除以獲得最佳結果。我在手指識別時遇到的挑戰之一是將手與背景區分開並識別手指的尖端。我將向您展示我用於手指跟蹤的技術,我在此項目中使用了該技術。如果想要查看手指識別和跟蹤的實際操作,請觀看我上傳的視頻。
  • 使用Python+OpenCV進行圖像處理(二)
    這四種技術應用一個共同的基本原理,即使用濾波器(內核)對圖像進行卷積運算。不同的是,在四種模糊方法中使用的濾波器的值是不同的。平均模糊(Average blurring)是取給定內核(kernel)區域下所有像素值的平均值替換中心的值。
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 使用一行Python代碼從圖像讀取文本
    處理圖像不是一項簡單的任務。對你來說,作為一個人,很容易看著某樣東西然後馬上知道你在看什麼。但電腦不是這樣工作的。對你來說太難的任務,比如複雜的算術,或者一般意義上的數學,是計算機毫不費力就能完成的。但在這裡,情況正好相反——對你來說很瑣碎的任務,比如識別圖像中的貓或狗,對電腦來說真的很難。
  • Python中如何利用Opencv打開視頻或圖像並用PyQt控制項顯示
    OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS作業系統上,使用起來十分方便,把它與PyQt結合起來,就可以順利的操作視頻、圖像了。具體安裝請自行百度,這裡介紹使用方法。
  • OpenCV-Python 直方圖-2:直方圖均衡|二十七
    目標在本節中,我們將學習直方圖均衡化的概念,並利用它來提高圖像的對比度。理論考慮這樣一個圖像,它的像素值僅局限於某個特定的值範圍。例如,較亮的圖像將把所有像素限制在高值上。但是一幅好的圖像會有來自圖像所有區域的像素。
  • 使用Python調整圖像大小
    可以說,每一個「使用計算機的人」都需要在某個時間點調整圖像的大小。MacOS的預覽版可以做到,WindowsPowerToys也可以。本文使用Python來調整圖像大小,幸運的是,圖像處理和命令行工具是Python的兩個特長。
  • 如何快速簡單的安裝opencv-python
    >pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python這樣就會從清華鏡像安裝opencv-contrib-python庫。
  • OpenCV中的快速直線檢測
    本文介紹該功能的使用方法其輸出結果剖析。本文範例運行環境FastLineDetectors運行必要條件FastLineDetectors屬於opencv-contrib中的模塊,需要安裝opencv-contrib-python。
  • OpenCV圖像處理之對像素點的操作
    input是原圖像的顯示,output是最終圖像的顯示。編譯工具:QT CreatorQT Creator配置OpenCV過程請看我的另一篇博客。你也可以設置改變窗口大小使用imshow顯示目標圖像6.像素處理Mat src;src = des.clone(); int nc =