計算機視覺基礎系列(python與opencv的操作與運用/tensorflow的基礎介紹)(十四)---浮雕效果和顏色映射

1 浮雕效果

浮雕效果和邊緣效果一樣,也是需要求梯度的過程

計算公式:newP = gray0 - gray1 + 150,即,灰度圖中,相鄰的兩個像素值之差加上150即爲新的像素值

代碼實現如下:

import cv2
import numpy as np
import math
img = cv2.imread('1.jpg', 1)
info = img.shape
cv2.imshow('src', img)
height = info[0]
width = info[1]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst = np.zeros((height, width, 1), np.uint8)
for i in range(0, height):
    for j in range(0, width-1):
        grayP0 = int(gray[i, j])
        grayP1 = int(gray[i, j+1])
        newP = grayP0 - grayP1 + 150
        # 防止越界
        if newP > 255:
            newP = 255
        if newP < 0:
            newP = 0
        dst[i, j] = newP
cv2.imshow("dst", dst)
cv2.waitKey(0)

效果圖爲:

2 顏色映射

顏色映射有很多方法,也有的很複雜,這裏運用的顏色映射的公式和工作量稍小,可以借鑑:
b = b*1.5    g = g*1.3

源碼是:

import cv2
import numpy as np
import math
img = cv2.imread('1.jpg', 1)
info = img.shape
cv2.imshow('src', img)
height = info[0]
width = info[1]
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 = b * 1.5
        g = g * 1.3
        # 防止越界
        if b > 255:
            b = 255
        if g > 255:
            g = 0
        dst[i, j] = (b, g, r)
cv2.imshow("dst", dst)
cv2.waitKey(0)

效果圖如下,可以明顯看到區別:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章