跟我學Python圖像處理丨圖像特效處理:毛玻璃、浮雕和油漆特效

摘要:本文講解常見的圖像特效處理,從而讓讀者實現各種各樣的圖像特殊效果,并通過Python和OpenCV實現 。
【跟我學Python圖像處理丨圖像特效處理:毛玻璃、浮雕和油漆特效】本文分享自華為云社區《[Python圖像處理] 二十四.圖像特效處理之毛玻璃、浮雕和油漆特效》,作者:eastmount 。
一.圖像毛玻璃特效圖像毛玻璃特效如圖所示,左邊為原始圖像,右邊為毛玻璃特效圖像 。它是用圖像鄰域內隨機一個像素點的顏色來替代當前像素點顏色的過程,從而為圖像增加一個毛玻璃模糊的特效 。
PS:該圖片為作者去喀納斯拍攝,真心美!
跟我學Python圖像處理丨圖像特效處理:毛玻璃、浮雕和油漆特效

文章插圖
Python實現代碼主要是通過雙層循環遍歷圖像的各像素點,再用定義的隨機數去替換各鄰域像素點的顏色 , 具體代碼如下所示 。
#coding:utf-8import cv2import numpy as np#讀取原始圖像src = https://www.huyubaike.com/biancheng/cv2.imread('scenery.png')#新建目標圖像dst = np.zeros_like(src)#獲取圖像行和列rows, cols = src.shape[:2]#定義偏移量和隨機數offsets = 5random_num = 0#毛玻璃效果: 像素點鄰域內隨機像素點的顏色替代當前像素點的顏色for y in range(rows - offsets): for x in range(cols - offsets): random_num = np.random.randint(0,offsets) dst[y,x] = src[y + random_num,x + random_num]#顯示圖像cv2.imshow('src',src)cv2.imshow('dst',dst)cv2.waitKey()cv2.destroyAllWindows()二.圖像浮雕特效圖像浮雕特效是仿造浮雕藝術而衍生的處理,它將要呈現的圖像突起于石頭表面,根據凹凸程度不同形成三維的立體效果 。Python繪制浮雕圖像是通過勾畫圖像的輪廓 , 并降低周圍的像素值,從而產生一張具有立體感的浮雕效果圖 。傳統的方法是設置卷積核,再調用OpenCV的filter2D()函數實現浮雕特效 。該函數主要是利用內核實現對圖像的卷積運算,其函數原型如下所示:
dst = filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
  • src表示輸入圖像
  • dst表示輸出的邊緣圖,其大小和通道數與輸入圖像相同
  • ddepth表示目標圖像所需的深度
  • kernel表示卷積核,一個單通道浮點型矩陣
  • anchor表示內核的基準點,其默認值為(-1,-1),位于中心位置
  • delta表示在儲存目標圖像前可選的添加到像素的值,默認值為0
  • borderType表示邊框模式
核心代碼如下:
kernel = np.array([[-1,0,0],[0,1,0],[0,0,0]])output = cv2.filter2D(src, -1, kernel)本小節將直接對各像素點進行處理,采用相鄰像素相減的方法來得到圖像輪廓與平面的差,類似邊緣的特征,從而獲得這種立體感的效果 。為了增強圖片的主觀感受,還可以給這個差加上一個固定值,如150 。實現效果如圖所示 。
跟我學Python圖像處理丨圖像特效處理:毛玻璃、浮雕和油漆特效

文章插圖
Python通過雙層循環遍歷圖像的各像素點,使用相鄰像素值之差來表示當前像素值,從而得到圖像的邊緣特征,最后加上固定數值150得到浮雕效果 , 具體代碼如下所示 。
# -*- coding: utf-8 -*-import cv2import numpy as np#讀取原始圖像img = cv2.imread('scenery.png', 1)#獲取圖像的高度和寬度height, width = img.shape[:2]#圖像灰度處理gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#創建目標圖像dstImg = np.zeros((height,width,1),np.uint8)#浮雕特效算法:newPixel = grayCurrentPixel - grayNextPixel + 150for i in range(0,height): for j in range(0,width-1): grayCurrentPixel = int(gray[i,j]) grayNextPixel = int(gray[i,j+1]) newPixel = grayCurrentPixel - grayNextPixel + 150 if newPixel > 255: newPixel = 255 if newPixel < 0: newPixel = 0 dstImg[i,j] = newPixel#顯示圖像cv2.imshow('src', img)cv2.imshow('dst',dstImg)#等待顯示cv2.waitKey()cv2.destroyAllWindows()三.圖像油漆特效圖像油漆特效類似于油漆染色后的輪廓圖形 , 它主要采用自定義卷積核和cv2.filter2D()函數實現,Python實現代碼主要通過Numpy定義卷積核,再進行特效處理 , 卷積核如公式(13-1)所示,其中心權重為10,其余值均為-1 。
跟我學Python圖像處理丨圖像特效處理:毛玻璃、浮雕和油漆特效

文章插圖
完整代碼如下所示:
# -*- coding: utf-8 -*-import cv2import numpy as np#讀取原始圖像src = https://www.huyubaike.com/biancheng/cv2.imread('scenery.png')#圖像灰度處理gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)#自定義卷積核kernel = np.array([[-1,-1,-1],[-1,10,-1],[-1,-1,-1]])#圖像浮雕效果output = cv2.filter2D(gray, -1, kernel)#顯示圖像cv2.imshow('Original Image', src)cv2.imshow('Emboss_1',output)#等待顯示cv2.waitKey()cv2.destroyAllWindows()

推薦閱讀