一、圖片灰度算法

灰度算法簡介

在計算機領域中,灰度(Gray scale)數字圖像是每個像素只有一個採樣顏色的圖像。這類圖像通常顯示爲從最暗黑色到最亮的白色的灰度,儘管理論上這個採樣可以是任何顏色的不同深淺,甚至可以是不同亮度上的不同顏色。灰度圖像與黑白圖像不同,在計算機圖像領域中黑白圖像只有黑白兩種顏色,灰度圖像在黑色與白色之間還有許多級的顏色深度

一.opencv灰度實現

  • 讀取時實現:
import cv2
# picture type 0:gray   1 color
img = cv2.imread("圖片展示.jpg", 0)
cv2.imshow("image", img)
cv2.waitKey(0)

  • 實時轉爲灰度
import cv2
img1 = cv2.imread("image0.jpg", 1)
# 顏色空間轉換的,將bgr轉換爲灰度圖片
dst = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
cv2.imshow("dst", dst)
cv2.waitKey(0)

二.灰度算法手動實現

  • 灰度算法著名的心理學公式:

Gray = R0.299 + G0.587 + B*0.114

根據心理學公式產生python如下代碼:

import cv2
import numpy as np
img = cv2.imread("image0.jpg", 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
dst = np.zeros((height, width, 3), np.uint8)
for i in range(0, height):
    for j in range(0, width):
        (b, g, r) = img[i, j]
        b = int(b)
        g = int(g)
        r = int(r)
        gray = b*0.114 + g*0.587 + r*0.299
        dst[i, j] = np.uint8(gray)
cv2.imshow("dst", dst)
cv2.waitKey(0)

算法優化建議:b0.114 + g0.587 + r0.299 可先將小數1000,然後將加總的和除以1000,避免精度損失

  • 非心理學公式:
import cv2
import numpy as np
img = cv2.imread("image0.jpg", 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
dst = np.zeros((height, width, 3), np.uint8)
for i in range(0, height):
    for j in range(0, width):
        (b, g, r) = img[i, j]
        gray = (int(b) + int(g) + int(r)) / 3 #(r+g+b)/3得到
        dst[i, j] = np.uint8(gray)
cv2.imshow("dst", dst)
cv2.waitKey(0)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章