日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数

發布時間:2023/12/29 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?目錄

(一)灰度圖像像素處理

(二)彩色圖像像素處理

(三)numpy.array庫在圖像處理中的應用

(四)查看圖像的屬性信息


? ? ? ? 接著筆記01繼續總結,當我們讀取一幅圖像的時候,一般為二值圖像、灰度圖像、彩色圖像。二值圖像就是組成圖像的像素非黑即白,只有兩種取值,在double類型中0代表黑,1代表白。uint8的話則是0代表黑,255代表白,如果圖像的像素不僅有兩種顏色組成,還有白色和黑色的之間的灰色,即把白色和黑色之間分成若干段,每段代表的灰度都不同,這時表現出來的圖像就是灰度圖像。彩色圖像則是色彩上給人的沖擊是不一樣,比如rgb彩色圖像,由三個通道組成,每一個彩色像素值是由三個通道上的各個對應的像素值疊加而成呈現出來的顏色。

(一)、灰度圖像像素處理

這里先把用上的lena灰度圖像放出來,以便大家進行實踐。如下圖所示。

思路:

第一步:先把讀取文件,然后顯示其由像素組成數值矩陣,顯示原圖像。

第二步:訪問原圖像矩陣中的某個像素值或某些像素值,然后對這些像素值進行修改

第三步:顯示修改之后的圖像和修改之后的像素值。

代碼如下:

import cv2 # 讀取灰度圖像,然后對像素值和圖像顯示,然后修改之后顯示修改之后的圖像和像素 filename = r'C:\Users\LBS\Desktop\lenagray.png' # 讀取圖像 f = cv2.imread(filename) # 顯示圖像,one是顯示圖像的窗口的名字 cv2.imshow('one', f) # 打印圖像對應的像素值的矩陣 print(f) # 利用for循環對原圖像的第10行到第99行,第80列到第99列的像素值改為255, for i in range(10,100):for j in range(80,100):f[i, j] = 255 # two代表修改后的圖像 cv2.imshow('two', f) print('f(10:100, 80:100)={0}'.format(f[10:100, 80:100])) # 按下任意鍵關閉圖像窗口 cv2.waitKey() cv2.destroyAllWindows()

結果:

左圖是原圖像,右圖是我們修改之后的,可以看出出現了長方形的白框,這是因為我們賦值了像素值255。

輸出的像素結果為:

修改之后的那部分都變成了255。?

(二)、彩色圖像像素處理

? ? ? ? 將rgb彩色圖像讀入到opencv內進行處理時,第一層第二層第三層分別對應b通道、g通道、r通道,和matlab處理時的通道對應順序剛好相反。但不影響我們對各個通道進行操作。加入一張圖片為f,則f[:,:,0], f[:,:,1],f[:,:,2]就對應了圖像的b通道、g通道、r通道的像素值,也可以利用cv2.split(f)[0],cv2.split(f)[1],cv2.split(f)[2],獲得三個通道。每一個通道我們又可以看作是灰度圖像對應的像素值矩陣。

圖像f[x,y,z]中x代表圖像的行,y代表圖像的列,z代表的某一通道,若為f[x,y],則是對應的三個通道,打印輸出的x行y列有三個值

思路:

第一步:先獲取彩色圖像的三維的數組。如有必要,再獲取各個通道的像素值二維數組

第二步:然后通過訪問三維數組的像素值對其像素進行修改。

第三步:顯示像素值被修改后的圖像,以及打印出修改的像素的值信息。

對應代碼:

import numpy as np import cv2 # 讀取彩色圖像 filename = r'C:\Users\LBS\Desktop\lena.jpg' f = cv2.imread(filename) # 顯示彩色圖像 cv2.imshow('01', f) print("修改像素之前,個別像素對應的像素值\n") # 圖像f[x,y,z]中x代表圖像的行,y代表圖像的列,z代表的某一通道,若為f[x,y],則是對應的三個通道,打印輸出的x行y列有三個值 print("f[0, 0]=\n", f[0, 0]) print("f[50,0]=\n", f[50, 0]) print("f[100,0]\n", f[100, 0]) # 對彩色圖像的像素進行處理,這里的三重for循環是對三個通道的值都進行修改 for i in range(0, 50):for j in range(0, 100):for k in range(0, 3):f[i, j, k] = 255 for i in range(50, 100):for j in range(0, 100):for k in range(0, 3):f[i, j, k] = 128 # 如果沒有指定對0、1、2、中的哪個通道對應的像素值進行修改時,則同時修改的是三個通道對應的像素值,三個通道都被修改為相同的值。 # 這里三個通道對應的值都為0,即黑色,可以通過圖像進行觀察 for i in range(100, 150):for j in range(0, 100):f[i, j] = 0 # 顯示修改之后的圖像 cv2.imshow('02', f) print("修改像素之后,個別像素對應的像素值\n") print("f[0, 0]=\n", f[0, 0]) print("f[50,0]=\n", f[50, 0]) print("f[100,0]\n", f[100, 0]) cv2.waitKey() cv2.destroyAllWindows()

對應結果圖像如下圖所示:

01是原圖像,02是修改之后的圖像。?

打印輸出更改像素值前后的結果如下圖所示。

?(三)numpy.array庫在圖像處理中的應用

? ? ? ?這個庫中有兩個函數,item(), itemset(),可以用來訪問像素和修改像素值,如果不用這兩個函數的話,我們也能操作,就像前面的(一)、(二)我們都是直接通過圖像對象進行操作的。

對于灰度圖像:

item(行,列):item是我們的圖像對象,像前面的f,由行和列我們就可以確定一個像素的值。

itemset((行,列),要修改的值):這個比我們前面的操作要方便一點,通過這個語句可以直接對像素進行修改。

對于彩色圖像:

item(行,列,通道):item是我們的圖像對象,像前面的f,由行和列,和通道我們就可以確定某一個通道的一個像素的值。

itemset((行,列,通道),要修改的值):即先通過(行,列,通道)確定一個像素,然后用要修改的值來改變它。如果省去了通道這個值,則是對三個通道的值都進行了相同值的賦值操作。

(四)查看圖像的屬性信息

假如f代表一幅圖像,則可以通過

f.shape:獲得圖像的行數、列數、通道數(對于彩色圖像而言)。

f.size:獲得圖像的像素數目,即整幅圖像有多少個像素。

f.dtype:可以查看圖像f的數據類型。

總結:以上就是對像素的基礎操作,請大家動手實踐哈。

轉載請注明出處。編寫不易,給個贊吧。

OpenCV學習筆記03--圖像運算--圖像加法運算、圖像位運算、圖像掩膜

總結

以上是生活随笔為你收集整理的OpenCV学习笔记02--图像像素处理--二值图像、灰度图像、彩色图像像素的处理、numpy.array中的对应的函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。