写点什么

跟我学 Python 图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效

  • 2022-10-26
    中国香港
  • 本文字数:2289 字

    阅读完需:约 8 分钟

跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效

本文分享自华为云社区《[Python图像处理] 二十四.图像特效处理之毛玻璃、浮雕和油漆特效》,作者:eastmount。

一.图像毛玻璃特效


图像毛玻璃特效如图所示,左边为原始图像,右边为毛玻璃特效图像。它是用图像邻域内随机一个像素点的颜色来替代当前像素点颜色的过程,从而为图像增加一个毛玻璃模糊的特效。


PS:该图片为作者去喀纳斯拍摄,真心美!



Python 实现代码主要是通过双层循环遍历图像的各像素点,再用定义的随机数去替换各邻域像素点的颜色,具体代码如下所示。


#coding:utf-8import cv2import numpy as np
#读取原始图像src = 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 通过双层循环遍历图像的各像素点,使用相邻像素值之差来表示当前像素值,从而得到图像的边缘特征,最后加上固定数值 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。



完整代码如下所示:


# -*- coding: utf-8 -*-import cv2import numpy as np
#读取原始图像src = 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()
复制代码


输出结果如下图所示:


四.本文小结


讲到这里,作者将分享的几个特效就讲解完毕,后续将继续分享包括素描、黄昏、灯光、流光等效果,希望读者喜欢。最后补充作者五一假期的一些感受!


《这些年璋娜去过的地方》一座城市,一道文化。一个故事,两个主角。这些年璋娜走过的山河,陪你感受这大千世界,留下的片片剪影和段段文字,异样的人生,精彩的生活。


青海•茶卡盐湖 2017-8-30。纯洁、清澈、蓝白交织,如同一场梦境,美得恍如隔世,它就是“天空之境”茶卡盐湖。



新疆•伊犁赛里木湖 2018-9-15。大西洋上最后的一滴眼泪,总闪烁着圣洁迷人的样子,不挂一丝,不染一尘。这就是伊犁的赛里木湖。站在空中草原拉那提,自己是那么的渺小,人生那些破事根本不值一提,热爱生命,敬畏自然。



(By:娜璋之家 Eastmount 2021-08-21 夜于贵阳)


参考文献:



点击关注,第一时间了解华为云新鲜技术~

发布于: 刚刚阅读数: 3
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效_Python_华为云开发者联盟_InfoQ写作社区