[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影象處理] 八.影象腐蝕與影象膨脹Python
- [Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移Python
- [Python影象處理] 三.獲取影象屬性、興趣ROI區域及通道處理Python
- Python 影像處理 OpenCV (2):畫素處理與 Numpy 操作以及 Matplotlib 顯示影像PythonOpenCV
- 影像行畫素處理
- 修改畫素
- webgl 影像處理2---影像畫素處理Web
- opencv 修改畫素OpenCV
- [Python影象處理] 七.影象閾值化處理及演算法對比Python演算法
- 影象處理庫GPUImage簡單使用GPUUI
- [Python影象處理] 一.影象處理基礎知識及OpenCV入門函式PythonOpenCV函式
- 影象處理之影象增強
- [Python影象處理] 五.影象融合、加法運算及影象型別轉換Python型別
- 實戰 | 用Python做影象處理(一)Python
- Pytorch資料讀取與預處理實現與探索PyTorch
- 【筆記】基於Python的數字影象處理筆記Python
- 數字影象處理DIP
- 值得珍藏機器視覺10大常用影象處理庫視覺
- Python錯誤處理和異常處理(二)Python
- Python資料處理(二):處理 Excel 資料PythonExcel
- 資料清洗與預處理:使用 Python Pandas 庫Python
- Python影像處理庫——PILPython
- wx-caman——基於 CamanJS 的微信小程式 Canvas 畫素級濾鏡處理庫JS微信小程式Canvas
- [Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算Python梯度
- [Python影象處理] 十.形態學之影象頂帽運算和黑帽運算Python
- java讀取大檔案並處理Java
- 數字影象處理-第一節
- [Python影象處理] 四.影象平滑之均值濾波、方框濾波、高斯濾波及中值濾波Python
- Python基礎教程:Day15-影象和辦公文件處理Python
- 影象二值化(python+opencv)PythonOpenCV
- 處理pandas讀取資料為nan時NaN
- 影象處理的濾鏡演算法演算法
- Python Cookie HTTP獲取cookie並處理PythonCookieHTTP
- Python Excel處理庫openpyxl詳解PythonExcel
- Python 中 Panda 庫 處理表格方法Python
- 計算機視覺 OpenCV Android | Mat畫素操作(影象畫素的讀寫、均值方差、算術、邏輯等運算、權重疊加、歸一化等操作)...計算機視覺OpenCVAndroid
- 阿里達摩院首款車載AI處理器:處理200萬畫素,同步6路攝像頭阿里AI