首先我們要了解圖像的構成,圖像是由像素構成的,圖像裏的任何一個點都是一個像素
左邊的圖像看上去比較模糊,右上角的比較清晰一點,但是他們都是由一系列點組成的
不同在於左邊的像素要低一些,而右邊的像素要高一點
我們平常所說的像素其實就是構成圖像的點的多少,即像素的數量,像素的大小等於行像素乘以列像素
比如像素5000W的要比500W像素要清晰
一、圖像的分類
二值圖像:任何一點非黑即白,只有兩個值(0,1)
灰度圖像:除了黑白還有灰色,把灰度分成256中不同的顏色,即有256個值,看起來會更細膩(0-255)
RGB圖像:即彩色圖像(red\green\blue)
簡單介紹下
比如我們隨便抓取二值圖像的某一個點,得到其像素,就是上圖右邊的形式,任何一個點都是由0或者1構成
對於灰度圖像,隨便抓取圖像的某一個點,得到其像素,就是上圖右邊的形式,任何一個點都是由0到255範圍之間的一個數字構成
對於彩色圖像,也就是我們最常見的RGB圖像,是由RGB三種三原色構成,所有顏色都可以按照不同比例的RGB進行調和得出,每種顏色的大小都是在0-255範圍之內。
對於彩色圖像,隨便抓取圖像的某一個點,得到其像素,就是上圖右邊的形式,任何一個點都是由三種顏色組成,每種顏色的取值0到255範圍之間的一個數字構成
即彩色圖
注:這裏要注意的問題是在opencv裏面對像素取值時,像素的順序是BGR
二、讀取像素
先看一段代碼
import cv2
img1=cv2.imread("/Users/admin/Desktop/模型數據/testz.png",0)
img2=cv2.imread("/Users/admin/Desktop/模型數據/testz.png",1)
print("img1的像素爲:",img1[100,100])
print("img2的像素爲:",img2[100,100])
imread函數,第二個參數如果是0那麼讀取的就是灰度圖像,如果是1則爲彩色圖像
img1爲一個灰度圖像,而img2是一個彩色圖像,我們看下輸出結果
runfile('/Users/admin/.spyder-py3/temp.py', wdir='/Users/admin/.spyder-py3')
img1的像素爲: 22
img2的像素爲: [10 20 30]
三、修改像素
修改像素比較簡單,採取直接賦值的方式
import cv2
img1=cv2.imread("/Users/admin/Desktop/模型數據/testz.png",0)
print("img1的像素爲:",img1[100,100])
img1[100,100]=100
print("img1的像素爲:",img1[100,100])
輸出結果:
runfile('/Users/admin/.spyder-py3/temp.py', wdir='/Users/admin/.spyder-py3')
img1的像素爲: 22
img1的像素爲: 100
彩色圖像也是一樣:
import cv2
img1=cv2.imread("/Users/admin/Desktop/模型數據/testz.png",1)
print("img1的像素爲:",img1[100,100])
img1[100,100]=[100,100,100]
print("img1的像素爲:",img1[100,100])
輸出結果:
runfile('/Users/admin/.spyder-py3/temp.py', wdir='/Users/admin/.spyder-py3')
img1的像素爲: [10 20 30]
img1的像素爲: [100 100 100]
當然我們也可以批量修改一個區域:
import cv2
img1=cv2.imread("/Users/admin/Desktop/模型數據/testz.png",1)
cv2.imshow("original",img1)
img1[100:150,100:150]=[100,100,100]
cv2.imshow("result",img1)
cv2.waitKey()
cv2.destroyAllWindows()