這裏採用四種方法對圖像進行灰度處理:python
方法一:讀取圖片時只讀取灰度圖像算法
方法二:調用opencv Api實現優化
方法三:算法實現圖像灰度:gray = (B + G + R)/3ui
方法四:算法實現:gray = r*0.299 + g*0.587 + b*0.114blog
代碼:圖片
import cv2
import numpy as np
gray1 = cv2.imread('D:/pythonob/imageinpaint/img/zidan.jpg',0)#方法一
imgSrc = cv2.imread('D:/pythonob/imageinpaint/img/zidan.jpg',1)
gray2 = cv2.cvtColor(imgSrc,cv2.COLOR_BGR2GRAY)#方法二:API實現圖像灰度。第二個參數:轉換方式BGR-->gray
#方法三;算法實現圖像灰度:gray = (B + G + R)/3
imgInfo = imgSrc.shape
height = imgInfo[0]
width = imgInfo[1]
gray3 = np.zeros((height,width,3),np.uint8)
for i in range(0,height):
for j in range(0,width):
(b,g,r) = imgSrc[i,j]
gray = (int(b) + int(g) + int(r))/3
gray3[i,j] = np.uint8(gray)
#方法四:gray = r*0.299 + g*0.587 + b*0.114
#優化:定點運算速度大於浮點運算速度,+-運算速度大於*/運算速度
#上式能夠改成gray = (r*1 + g*2 + b*1)/4 即先乘四,再除以四(精度不高)能夠改成乘以10,100,1000,10000等等
#進一步用移位表示:修改成-->gray = (r + (g<<1) + b)>>2 g*2即g左移一位,總體*4即總體右移2位
gray4 = np.zeros((height,width,3),np.uint8)
for i in range(0,height):
for j in range(0,width):
(b,g,r) = imgSrc[i,j]
gray = int(b)*0.114 + int(g)*0.587 + int(r)*0.299
gray4[i,j] = np.uint8(gray)
cv2.imshow('G1',gray1)
cv2.imshow('imgSrc',imgSrc)
cv2.imshow('G2',gray2)
cv2.imshow('G3',gray3)
cv2.imshow('G4',gray4)
cv2.waitKey(0)
效果圖: