本篇推文共計1000個字,閱讀時間約3分鐘。編程
![](http://static.javashuo.com/static/loading.gif)
電腦環境準備微信
知識準備架構
一張圖片是由像素點矩陣構成,咱們對圖片進行操做即爲對圖片的像素點矩陣進行操做。咱們只要在這個像素點矩陣中找到這個像素點的位置,好比第x行,第y列。因此這個像素點在這個像素點矩陣中的位置就能夠表示成(x,y)app
同時由於一個像素點的顏色一般包括R、G、B三個份量,分別顯示出紅、綠、藍三個顏色,灰度化就是使彩色圖像的R、G、B三個份量相等的過程。灰度圖像中每一個像素僅具備一種樣本顏色,其灰度是位於黑色與白色之間的多級色彩深度,灰度值大的像素點比較亮,反之比較暗,像素值最大爲255(表示白色),像素值最小爲0(表示黑色)。函數
灰度化處理學習
Opencv中圖片的灰度化:將一個像素點的三個顏色變量相等,R=G=B,此時該值稱爲灰度值。大數據
img1=cv2.imread('girl.png',0)
方法2:將原圖進行灰度化處理
#灰度化處理2:flex
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ui
import cv2
#讀入原始圖像
img=cv2.imread('girl.png',1)
#灰度化處理1:直接讀入灰度化圖像
img1=cv2.imread('girl.png',0)
#灰度化處理2:
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#經過窗口展現圖片 第一個參數爲窗口名 第二個爲讀取的圖片變量
cv2.imshow('img',img)
cv2.imshow('gray1',img1)
cv2.imshow('gray2',gray)
#暫停cv2模塊 否則圖片窗口一瞬間即就會消失 觀察不到
cv2.waitKey(0)
![](http://static.javashuo.com/static/loading.gif)
cv.threshold ()函數是圖像二值化函數
其中,第二個參數是斷定像素點的臨界值。超過了這個點,將會被劃分爲255,低於這個點,將會被劃分爲0。具體的參數0~255能夠自行根據須要調節。
import cv2
#讀入原始圖像
img=cv2.imread('girl.png',1)
#灰度化處理
img1=gray.copy()
#灰度化處理:此灰度化處理用於圖像二值化
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#二值化函數
cv2.threshold(gray,140,255,0,gray)#二值化函數
#經過窗口展現圖片 第一個參數爲窗口名 第二個爲讀取的圖片變量
cv2.imshow('img',img)
cv2.imshow('gray',img1)
cv2.imshow('Binarization',gray)
#暫停cv2模塊 否則圖片窗口一瞬間即就會消失 觀察不到
cv2.waitKey(0)
Opencv中的伽馬變換是用來圖像加強,提高了暗部細節,簡單來講就是經過非線性變換,讓圖像從暴光強度的線性響應變得更接近人眼感覺的響應,即將漂白(相機曝光)或過暗(曝光不足)的圖片,進行矯正。
伽馬值小於1時,會拉伸圖像中灰度級較低的區域,同時會壓縮灰度級較高的部分
伽馬值大於1時,會拉伸圖像中灰度級較高的區域,同時會壓縮灰度級較低的部分
import cv2
import copy
#讀入原始圖像
img=cv2.imread('girl.png',1)
#灰度化處理
img1=cv2.imread('girl.png',0)
#灰度化處理:此灰度化處理用於圖像二值化
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#伽馬變換
gamma=copy.deepcopy(gray)
rows=img.shape[0]
cols=img.shape[1]
for i in range(rows):
for j in range(cols):
gamma[i][j]=3*pow(gamma[i][j],0.8)
#經過窗口展現圖片 第一個參數爲窗口名 第二個爲讀取的圖片變量
cv2.imshow('img',img)
cv2.imshow('gray',img1)
cv2.imshow('gamma',gamma)
#暫停cv2模塊 否則圖片窗口一瞬間即就會消失 觀察不到
cv2.waitKey(0)
Opencv中的對數變換:因爲對數曲線在像素值較低的區域斜率大,在像素值較高的區域斜率較小,因此圖像通過對數變換後,較暗區域的對比度將有所提高。可用於加強圖像的暗部細節。
灰度圖像的對數變換通常表示如公式所示:
DB=C*log(1+ DA)
其中c爲尺度比較常數,DA爲原始圖像灰度值,DB爲變換後的目標灰度值。
以下圖所示,它表示對數曲線下的灰度值變化狀況。
因爲對數曲線在像素值較低的區域斜率大,在像素值較高的區域斜率較小,因此圖像通過對數變換後,較暗區域的對比度將有所提高。這種變換可用於加強圖像的暗部細節,從而用來擴展被壓縮的高值圖像中的較暗像素。
對數變換實現了擴展低灰度值而壓縮高灰度值的效果,被普遍地應用於頻譜圖像的顯示中。一個典型的應用是傅立葉頻譜,其動態範圍可能寬達0~106直接顯示頻譜時,圖像顯示設備的動態範圍每每不能知足要求,從而丟失大量的暗部細節;而在使用對數變換以後,圖像的動態範圍被合理地非線性壓縮,從而能夠清晰地顯示。
import cv2
import copy
import math
#讀入原始圖像
img=cv2.imread('girl.png',1)
#灰度化處理
img1=cv2.imread('girl.png',0)
#灰度化處理:此灰度化處理用於圖像二值化
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 對數變換
logc = copy.deepcopy(gray)
rows=img.shape[0]
cols=img.shape[1]
for i in range(rows):
for j in range(cols):
logc[i][j] = 3 * math.log(1 + logc[i][j])
#經過窗口展現圖片 第一個參數爲窗口名 第二個爲讀取的圖片變量
cv2.imshow('img',img)
cv2.imshow('gray',img1)
cv2.imshow('logc',logc)
#暫停cv2模塊 否則圖片窗口一瞬間即就會消失 觀察不到
cv2.waitKey(0)
運行程序後,顯示以下:
Opencv中的反色變換:對原圖像像素值的顏色進行反轉,即黑色變爲白色,白色變爲黑色。
import cv2
import copy
import math
#讀入原始圖像
img=cv2.imread('girl.png',1)
#灰度化處理
img1=cv2.imread('girl.png',0)
#灰度化處理:此灰度化處理用於圖像二值化
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 反色變換
cover=copy.deepcopy(gray)
rows=img.shape[0]
cols=img.shape[1]
for i in range(rows):
for j in range(cols):
cover[i][j]=255-cover[i][j]
#經過窗口展現圖片 第一個參數爲窗口名 第二個爲讀取的圖片變量
cv2.imshow('img',img)
cv2.imshow('gray',img1)
cv2.imshow('cover',cover)
#暫停cv2模塊 否則圖片窗口一瞬間即就會消失 觀察不到
cv2.waitKey(0)
本期推文到此結束,歡迎各位讀者關注本公衆號。
本公衆號將開設【Python3+OpenCV】專題,
並陸續推出相關係列文章,篇篇精彩。
歡迎讀者給本公衆號打個星標,讓你天天學習新知識,探索人工智能的奧妙。
往期回顧
武漢加油,中國加油!
![undefined](http://static.javashuo.com/static/loading.gif)
你與世界
只差一個
公衆號
掃描上方二維碼,便可獲取「編程學習資料」大禮包一份
本文分享自微信公衆號 - 看那個碼農(gh_31e9c1ac7ce4)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。