Python-OpenCV 处理图像(三):图像像素点操作
生活随笔
收集整理的這篇文章主要介紹了
Python-OpenCV 处理图像(三):图像像素点操作
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
0x01. 像素
有兩種直接操作圖片像素點(diǎn)的方法:
第一種辦法就是將一張圖片看成一個(gè)多維的list,例如對(duì)于一張圖片im,想要操作第四行第四列的像素點(diǎn)就直接 im[3,3] 就可以獲取到這個(gè)點(diǎn)的RGB值。
第二種就是使用 OpenCV 提供的 Get1D、 Get2D 等函數(shù)。
推薦使用第一種辦法吧,畢竟簡(jiǎn)單。
0x02. 獲取行和列像素
有一下四個(gè)函數(shù):
-
cv.GetCol(im, 0): 返回第一列的像素
-
cv GetCols(im, 0, 10): 返回前 10 列
-
cv.GetRow(im, 0): 返回第一行
-
cv.GetRows(im, 0, 10): 返回前 10 行
0x03. 批量處理
需要批量處理所有的像素點(diǎn)的時(shí)候,只需要使用for循環(huán)迭代處理就可以了:
import cv2.cv as cvim = cv.LoadImage("img/lena.jpg")for i in range(im.height):for j in range(im.width):im[i,j] # 這里可以處理每個(gè)像素點(diǎn)還有一種迭代處理的方式是使用 LineIterator,不過(guò)在聲明 LineIterator 的時(shí)候需要制定處理像素點(diǎn)的開(kāi)始點(diǎn)和結(jié)束點(diǎn)。
import cv2.cv as cvim = cv.LoadImage("img/lena.jpg")li = cv.InitLineIterator(im, (0, 0), (im.rows, im.cols)) #So loop the entire matrixfor (r, g, b) in li:# 這里可以對(duì)每個(gè)像素點(diǎn)的 r g b 進(jìn)行處理娛樂(lè)一下, 隨機(jī)獲取 5000 個(gè)像素點(diǎn),然后把顏色換成一個(gè)隨機(jī)的值(salt):
import cv2.cv as cvimport random# 這里也可以使用 Get2D/Set2D 來(lái)加載圖片 im = cv.LoadImage("img/lena.jpg") for k in range(5000): #Create 5000 noisy pixelsi = random.randint(0,im.height-1)j = random.randint(0,im.width-1)color = (random.randrange(256),random.randrange(256),random.randrange(256))im[i,j] = colorcv.ShowImage("Noize", im) cv.WaitKey(0)效果圖:
總結(jié)
以上是生活随笔為你收集整理的Python-OpenCV 处理图像(三):图像像素点操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python-OpenCV 处理图像(二
- 下一篇: Python-OpenCV 处理图像(四