[Python影象處理] 二.OpenCV+Numpy庫讀取與修改畫素
該系列文章是講解Python OpenCV影象處理知識,前期主要講解影象入門、OpenCV基礎用法,中期講解影象處理的各種演算法,包括影象銳化運算元、影象增強技術、影象分割等,後期結合深度學習研究影象識別、影象分類應用。希望文章對您有所幫助,如果有不足之處,還請海涵~
同時推薦作者的C++影象系列知識:
[數字影象處理] 一.MFC詳解顯示BMP格式圖片
[數字影象處理] 二.MFC單文件分割視窗顯示圖片
[數字影象處理] 三.MFC實現影象灰度、取樣和量化功能詳解
[數字影象處理] 四.MFC對話方塊繪製灰度直方圖
[數字影象處理] 五.MFC影象點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
[數字影象處理] 六.MFC空間幾何變換之影象平移、映象、旋轉、縮放詳解
[數字影象處理] 七.MFC影象增強之影象普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解
前文參考:
[Python影象處理] 一.影象處理基礎知識及OpenCV入門函式
本篇文章主要講解 OpenCV+Numpy 影象處理基礎知識,包括讀取畫素和修改畫素。知識點如下:
1.傳統讀取畫素方法
2.傳統修改畫素方法
3.Numpy讀取畫素方法
4.Numpy修改畫素方法
PS: 文章也學習了網易雲高登教育的知識,推薦大家學習。
PSS:2019年1~2月作者參加了CSDN2018年部落格評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index
一.傳統讀取畫素方法
1.灰度影象,返回灰度值。
返回值=影象(位置引數),例:p = img[88,142] print§
# -*- coding:utf-8 -*-
import cv2
#讀取圖片
img = cv2.imread("picture.bmp", cv2.IMREAD_UNCHANGED)
#灰度影象
p = img[88, 142]
print(p)
#顯示影象
cv2.imshow("Demo", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
#寫入影象
cv2.imwrite("testyxz.jpg", img)
輸出結果如下圖所示:[131 131 131],由於該圖是24位BMP,B=G=R輸出三個相同的結果,有的影象僅有一個畫素點則輸出一個值。
2.BGR影象,返回值為B、G、R的值。
例:
b = img[78, 125, 0] print(b)
g = img[78, 125, 1] print(g)
r = img[78,125, 2] print®
# -*- coding:utf-8 -*-
import cv2
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#BGR影象
b = img[78, 125, 0]
print(b)
g = img[78, 125, 1]
print(g)
r = img[78, 125, 2]
print(r)
#方法二
bgr = img[78, 125]
print(bgr)
#顯示影象
cv2.imshow("Demo", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
#寫入影象
cv2.imwrite("testyxz.jpg", img)
輸出畫素和影象如下所示:
155
104
61
[155 104 61]
二.傳統修改畫素方法
1.修改單個畫素值
BGR影象可以通過位置引數直接訪問畫素值並進行修改,輸出結果如下所示:
# -*- coding:utf-8 -*-
import cv2
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#BGR影象
print(img[78, 125, 0])
print(img[78, 125, 1])
print(img[78, 125, 2])
#修改畫素
img[78, 125, 0] = 255
img[78, 125, 1] = 255
img[78, 125, 2] =255
print(img[78,
print(img[78, 125])
img[78, 125] = [10, 10, 10]
print(img[78, 125])125, 0])
print(img[78, 125, 1])
print(img[78, 125, 2])
#方法二
print(img[78, 125])
img[78, 125] = [10, 10, 10]
print(img[78, 125])
輸出結果如下所示,通過兩種方法分別將B、G、R畫素值修改為255和0。
155
104
61
255
255
255
[255 255 255]
[10 10 10]
2.修改區域畫素
通過訪問影象陣列的位置區域實現區域畫素修改,比如 [100:150,400:500] 是訪問第100到150行,400到500列的區域,再對該區域畫素進行修改。程式碼如下所示:
# -*- coding:utf-8 -*-
import cv2
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#BGR影象
img[100:150, 400:500] = [255, 255, 0]
#顯示影象
cv2.imshow("Demo", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
#寫入影象
cv2.imwrite("testyxz.jpg", img)
輸出結果如下圖所示,[255, 255, 0]是淺藍色。
三.Numpy讀取畫素方法
使用Numpy進行畫素讀取,呼叫方式如下:
返回值 = 影象.item(位置引數)
# -*- coding:utf-8 -*-
import cv2
import numpy
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#Numpy讀取畫素
blue = img.item(78, 100, 0)
green = img.item(78, 100, 1)
red = img.item(78, 100, 2)
print(blue)
print(green)
print(red)
#顯示影象
cv2.imshow("Demo", img)
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出結果如下,注意OpenCV讀取影象通道是BGR,也可以轉換成RGB在進行處理。
155
104
61
四.Numpy修改畫素方法
使用Numpy的itemset函式修改畫素,呼叫方式如下:
影象.itemset(位置, 新值)
例如:img.itemset((88,99), 255)
# -*- coding:utf-8 -*-
import cv2
import numpy
#讀取圖片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
#Numpy讀取畫素
print(img.item(78, 100, 0))
print(img.item(78, 100, 1))
print(img.item(78, 100, 2))
img.itemset((78, 100, 0), 100)
img.itemset((78, 100, 1), 100)
img.itemset((78, 100, 2), 100)
print(img.item(78, 100, 0))
print(img.item(78, 100, 1))
print(img.item(78, 100, 2))
輸出結果如下:
155
104
61
100
100
100
也可以同時輸出B、G、R三個值,核心程式碼如下:
print(img[78, 78])
img.itemset((78, 78, 0), 0)
img.itemset((78, 78, 1), 0)
img.itemset((78, 78, 2), 0)
print(img[78, 78])
#[155 104 61]
#[0 0 0]
希望文章對大家有所幫助,如果有錯誤或不足之處,還請海涵。
(By:Eastmount 2018-08-28 早8點 https://blog.csdn.net/Eastmount/)
相關文章
- 影象中的畫素處理
- Python-OpenCV 處理影象(三):影象畫素點操作PythonOpenCV
- c#影象處理入門(-bitmap類和影象畫素值獲取方法)C#
- 讀取BMP影象每一畫素點RGB資料
- Python-OpenCV 處理影象(八):影象二值化處理PythonOpenCV
- 影像行畫素處理
- [Python影象處理] 八.影象腐蝕與影象膨脹Python
- Python影象處理庫Pillow入門Python
- Python 影像處理 OpenCV (2):畫素處理與 Numpy 操作以及 Matplotlib 顯示影像PythonOpenCV
- webgl 影像處理2---影像畫素處理Web
- [Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移Python
- Python-OpenCV 處理影象(二):濾鏡和影象運算PythonOpenCV
- 常用的畫素操作演算法:影象加法、畫素混合、提取影象中的ROI演算法
- [Python影象處理] 三.獲取影象屬性、興趣ROI區域及通道處理Python
- opencv 修改畫素OpenCV
- Python影象處理庫:Pillow 初級教程Python
- Python-OpenCV 處理影象(七):影象灰度化處理PythonOpenCV
- MATLAB數字影象處理(二)影象增強Matlab
- python PIL 影象處理操作Python
- 使用Excel的VBA來讀取和修改bmp點陣圖畫素資料Excel
- 影象處理庫GPUImage簡單使用GPUUI
- 6 款 Javascript 的影象處理庫JavaScript
- iOS 影象處理 - 影象拼接iOS
- [Python影象處理] 七.影象閾值化處理及演算法對比Python演算法
- 影象處理 二維小波變換
- Python xlrd讀取excel異常處理PythonExcel
- [Python影象處理] 一.影象處理基礎知識及OpenCV入門函式PythonOpenCV函式
- 影象處理之影象增強
- UIImage 影象處理UI
- Bayer影象處理
- python數字影象處理(1):環境安裝與配置Python
- [Python影象處理] 五.影象融合、加法運算及影象型別轉換Python型別
- 數字影象處理之二維碼影象提取演算法(一)演算法
- 實戰 | 用Python做影象處理(一)Python
- Python OpenCV Tutorial Introduction影象處理教程PythonOpenCV
- Python-OpenCV 處理影象(一):基本操作PythonOpenCV
- cocos2d-x畫素級觸控處理
- 【OpenCV】訪問Mat影象中每個畫素的值OpenCV