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

跟我学,python,图像处理,图像,特效,处理,毛玻璃,浮雕,油漆 · 浏览次数 : 289

小编点评

**摘要** 本文介绍了常见图像特效处理,并通过Python和OpenCV实现这些特效。文章包含以下内容: 1. **图像毛玻璃特效**:通过随机替换邻域像素点的颜色,实现毛玻璃模糊的特效。 2. **图像浮雕特效**:通过勾画图像轮廓,降低周围像素值,实现浮雕特效。 3. **图像油漆特效**:通过自定义卷积核,进行油漆风格的特效处理。 **代码示例** 以下是图像毛玻璃特效的Python代码示例: ```python import cv2 import numpy as np # 读取原始图像 src = cv2.imread('scenery.png') # 创建目标图像 dst = np.zeros_like(src) # 定义偏移量和随机数 offsets = 5 random_num = np.random.randint(0, offsets) # 执行毛玻璃特效 for y in range(rows - offsets): for x in range(cols - offsets): random_num = np.random.randint(0, offsets) dst[y + random_num, x + random_num] = src[y + random_num, x + random_num] # 显示图像 cv2.imshow('src', src) cv2.imshow('dst', dst) cv2.waitKey() cv2.destroyAllWindows() ``` **其他资源** * 《数字图像处理》(第3版),冈萨雷斯著,阮秋琦译,电子工业出版社,2013年 * 《OpenCV3编程入门》,毛星云,冷雪飞,电子工业出版社,2015,北京.Eastmount

正文

摘要:本文讲解常见的图像特效处理,从而让读者实现各种各样的图像特殊效果,并通过Python和OpenCV实现。

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

一.图像毛玻璃特效

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

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

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

#coding:utf-8
import cv2
import numpy as np
#读取原始图像
src = cv2.imread('scenery.png')
#新建目标图像
dst = np.zeros_like(src)
#获取图像行和列
rows, cols = src.shape[:2]
#定义偏移量和随机数
offsets = 5
random_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 cv2
import 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 + 150
for 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 cv2
import 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()

输出结果如下图所示:

参考文献:

 

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

与跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效相似的内容:

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

摘要:本文讲解常见的图像特效处理,从而让读者实现各种各样的图像特殊效果,并通过Python和OpenCV实现。 本文分享自华为云社区《[Python图像处理] 二十四.图像特效处理之毛玻璃、浮雕和油漆特效》,作者:eastmount。 一.图像毛玻璃特效 图像毛玻璃特效如图所示,左边为原始图像,右边

跟我学Python图像处理丨图像分类原理与案例

摘要:本篇文章将分享图像分类原理,并介绍基于KNN、朴素贝叶斯算法的图像分类案例。 本文分享自华为云社区《[Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例丨【百变AI秀】》,作者:eastmount 。 一.图像分类 图像分类(Image Classifica

跟我学Python图像处理丨带你入门OpenGL

摘要:介绍Python和OpenGL的入门知识,包括安装、语法、基本图形绘制等。 本文分享自华为云社区《[Python图像处理] 二十七.OpenGL入门及绘制基本图形(一)》,作者:eastmount。 一.OpenGL入门知识 1.什么是OpenGL OpenGL(Open Graphics L

跟我学Python丨图像增强及运算:局部直方图均衡化和自动色彩均衡化处理

摘要:本文主要讲解图像局部直方图均衡化和自动色彩均衡化处理。这些算法可以广泛应用于图像增强、图像去噪、图像去雾等领域。 本文分享自华为云社区《[Python从零到壹] 五十四.图像增强及运算篇之局部直方图均衡化和自动色彩均衡化处理》,作者: eastmount。 一.局部直方图均衡化 前文通过调用O

跟女朋友介绍十个常用的 Python 内置函数,她夸了我一整天

内置函数是什么 了解内置函数之前,先来了解一下什么是函数 将使用频繁的代码段进行封装,并给它起一个名字,当我们使用的时候只需要知道名字就行 函数就是一段封装好的、可以重复使用的代码,函数使得我们的程序更加简洁、模块化,提高了代码的复用性 举个例子 我想实现一个求球表面积功能的程序,当我们知道半径 r

python进阶:带你学习实时目标跟踪

摘要:本程序主要实现了python的opencv人工智能视觉模块的目标跟踪功能。 本文分享自华为云社区《python进阶——人工智能实时目标跟踪,这一篇就够用了!》,作者:lqj_本人 。 前言 本程序主要实现了python的opencv人工智能视觉模块的目标跟踪功能。 项目介绍 区域性锁定目标实时

[转帖]Python-Mock接口测试

https://www.cnblogs.com/zhangwuxuan/p/12928850.html 前言 今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试。 什么是mock? 测试桩,模拟被测对象的返回,用于测试 通常意义的mock指的就是mock server, 模拟服务端

python 星号(*) 还能这么用

哈喽大家好,我是咸鱼 今天跟大家介绍一下 python 当中星号(`*`)的一些用法 首先大家最常见的就是在 python 中 `*` 是乘法运算符,实现乘法 ```python sum = 5 * 5 # 25 ``` 除此之外,还有一种常见的用法就是 `*` 号操作符在函数中的用法 - 单星号(

[转帖]Python基础之判断和循环(三)

https://www.jianshu.com/p/5a7552821c63 一、判断 关于判断,跟字面意思一样,就是判断某一个时刻应不应该做某件事; 语法: if 判断条件: 执行语句…… else: 执行语句…… 判断条件: <:小于 >:大于 ==:等于 !=:不等于 >=:大于等于 <=:小

深挖 Python 元组 pt.1

哈喽大家好,我是咸鱼 好久不见甚是想念,2023 年最后一次法定节假日已经结束了,不知道各位小伙伴是不是跟咸鱼一样今天就开始“搬砖”了呢? 我们知道元组(tuple)是 Python 的内置数据类型,tuple 是一个不可变的值序列 tuple 的元素可以是任何类型,一般用在存储异构数据(例如数据库