当前位置: 首页 > news >正文

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果

目录

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果

一、简单介绍

二、简单图像浮雕效果实现原理

三、简单水彩画效果案例实现简单步骤

四、注意事项:


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

这里使用 Python  基于 OpenCV 进行视觉图像处理,......

二、简单图像浮雕效果实现原理

水彩画是一种具有独特风格的绘画形式,其特点包括:

  • 色彩丰富:水彩画常常使用鲜艳的色彩,色彩层次丰富,可以呈现出丰富多彩的效果。

  • 柔和渐变:水彩画的色彩过渡通常比较柔和,可以呈现出平滑的渐变效果,使得画面更加柔和自然。

  • 透明质感:水彩画具有一种透明质感,颜色之间可以相互渗透,形成柔和的色彩层次。

  • 颜料晕染:在水彩画中,颜料常常会晕染开来,形成具有艺术感染力的效果。

要实现水彩画效果,可以采用以下方法:

  • 模糊处理:对图像进行模糊处理,可以使得图像中的细节变得柔和,呈现出水彩画的特有质感。常见的模糊方法包括高斯模糊、中值模糊等。

  • 边缘保留滤波:边缘保留滤波可以保留图像的边缘信息,同时对图像的其他部分进行模糊处理,从而增强图像的整体层次感和质感。

  • 颜色量化:对图像的颜色进行量化处理,可以降低图像的色彩深度,使得图像的色彩更加柔和,符合水彩画的特点。

  • 纹理增强:通过增强图像的纹理信息,可以使得图像更加丰富多彩,增强水彩画的艺术感染力。

  • 局部调整:根据实际需求,对图像的局部区域进行调整,可以进一步增强水彩画的效果,使得画面更加丰富多彩。

实现原理:

1、灰度转换:首先,将彩色图像转换为灰度图像,以减少处理的复杂度。

将彩色图像转换为灰度图像,通常可以使用以下函数:

gray_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2GRAY)

这里 color_image 是彩色图像,cv2.COLOR_BGR2GRAY 表示将BGR格式的彩色图像转换为灰度图像。

2、中值模糊处理:对灰度图像进行中值模糊处理,以减少图像中的噪声,使得后续的边缘检测更加准确。

对灰度图像进行中值模糊处理,可以使用以下函数:

blurred_image = cv2.medianBlur(gray_image, ksize)

这里 ksize 是中值模糊的核大小,一般取奇数,表示模糊的程度。

3、边缘检测:使用 Laplacian 算子进行边缘检测,以获取图像中的边缘信息。

使用 Laplacian 算子进行边缘检测,可以使用以下函数:

edges = cv2.Laplacian(blurred_image, ddepth, ksize)

这里 ddepth 表示输出图像的深度(通常设置为cv2.CV_64F),ksize 是 Laplacian 算子的核大小。

4、边缘二值化:对边缘图像进行二值化处理,得到一个边缘掩码,其中边缘部分为白色(255),非边缘部分为黑色(0)。

对边缘图像进行二值化处理,可以使用以下函数:

_, edge_binary = cv2.threshold(edges, threshold, max_val, cv2.THRESH_BINARY)

这里 threshold 是阈值,超过阈值的像素设为 max_val,否则设为0。

5、颜色量化:对原始彩色图像进行颜色量化处理,保留图像的边缘特征,同时降低图像的颜色深度。

对原始彩色图像进行颜色量化处理,保留图像的边缘特征,可以使用以下函数:

quantized_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2LAB)

这里将彩色图像转换到 LAB 色彩空间,这种颜色空间对颜色量化非常友好。

6、合并处理:将颜色量化后的图像与边缘掩码进行合并,只保留图像中的边缘部分,并对非边缘部分进行遮罩,从而生成水彩画效果的图像。

合并处理,可以通过以下函数实现:

result_image = cv2.bitwise_and(quantized_image, quantized_image, mask=edge_binary)

这里的关键函数是 cv2.bitwise_and(),它是 OpenCV 中用于按位与运算的函数。具体参数含义如下:

  • quantized_image: 颜色量化后的图像。
  • quantized_image: 作为第二个参数,这里与第一个参数相同,表示进行按位与运算的第二个图像。
  • mask: 边缘掩码,即二值化后的边缘图像。只有与该掩码中对应位置为白色的像素才会被保留,其他像素会被置为0。

这样处理后,结果图像中只会保留原始彩色图像的边缘部分,非边缘部分会被遮罩掉,生成水彩画效果的图像。

三、简单水彩画效果案例实现简单步骤

1、编写代码

2、运行效果

3、具体代码

"""
简单水彩画效果"""import cv2def watercolor_effect(image):"""水彩画效果:param image::return:"""# 将图像转换为灰度图像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 对灰度图像进行中值模糊处理blurred = cv2.medianBlur(gray, 15)# 对模糊处理后的图像进行边缘检测edges = cv2.Laplacian(blurred, cv2.CV_8U, ksize=5)# 对边缘图像进行二值化处理_, mask = cv2.threshold(edges, 100, 255, cv2.THRESH_BINARY_INV)# 对原始图像进行颜色量化quantized = cv2.edgePreservingFilter(image, flags=1, sigma_s=60, sigma_r=0.4)# 将颜色量化后的图像与边缘掩码进行合并watercolor = cv2.bitwise_and(quantized, quantized, mask=mask)return watercolordef main():# 读取图像image = cv2.imread('Images/DogFace.jpg')# 设置窗口属性,并显示图片cv2.namedWindow("Dog", cv2.WINDOW_KEEPRATIO)cv2.imshow("Dog", image)# 应用水彩画效果watercolor_image = watercolor_effect(image)# 设置窗口属性,并显示图片cv2.namedWindow("Watercolor Image", cv2.WINDOW_KEEPRATIO)cv2.imshow('Watercolor Image', watercolor_image)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == "__main__":main()

四、注意事项:

  1. 参数调整:水彩画效果的质量受到参数的影响,尤其是中值模糊处理、边缘检测和颜色量化的参数。可以根据实际情况调整参数,以获得最佳的效果。

  2. 灰度处理:在处理彩色图像之前,首先要将其转换为灰度图像。这是因为水彩画效果通常只应用于单通道图像。

  3. 效率考虑:水彩画效果的处理可能会比较耗时,尤其是在边缘检测和颜色量化方面。因此,在处理大尺寸图像时,需要考虑到效率问题。

相关文章:

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之八 简单水彩画效果 一、简单介绍 二、简单图像浮雕效果实现原理 三、简单水彩画效果案例实现简单步骤 四、注意事项…...

Chrome浏览器 安装Vue插件vue-devtools

前言 vue-devtools 是一个为 Vue.js 开发者设计的 Chrome 插件。它可以让你更轻松地审查和调试 Vue 应用程序。与普通的浏览器控制台工具不同,Vue.js devtools 专为 Vue 的响应性数据和组件结构量身定做。 1. 功能介绍 组件树浏览:这个功能可以让你查…...

相册清理大师-手机重复照片整理、垃圾清理软件

相册清理大师是一款超级简单实用的照片视频整理工具。通过便捷的操作手势,帮助你极速整理相册中的照片和视频、释放手机存储空间。 【功能简介】 向上滑动:删除不要的照片 向左滑动:切换下一张照片 向右滑动:返回上一张照片 整理分…...

【GitLab】Ubuntu 22.04 快速安装 GitLab

在 Ubuntu 22.04 上安装最新版本的 GitLab,可以按照以下步骤操作: 1. 更新系统: 在终端中执行以下命令以确保系统是最新的: sudo apt update sudo apt upgrade2. 安装依赖: 安装 GitLab 所需的依赖包: …...

Linux重点思考(下)--shell脚本使用以及内核开发

Linux重点思考(下)--shell脚本使用和组合拳 shell脚本的基础算法shell脚本写123...n的值,说思路Shell 脚本用于执行服务器性能测试的死循环Shell 脚本备份和定时清理垃圾文件 shell脚本的内核开发正向映射反向映射 shell脚本的基础算法 shell脚本写123……...

2024世界技能大赛某省选拔赛“网络安全项目”B模块--应急响应解析

广东省第三届职业技能大赛“网络安全项目”B模块任务书 PS: 关注鱼影安全第一部分 网络安全事件响应任务 1:应急响应第二部分 数字取证调查第三部分 应用程序安全:需要环境可以私信博主~PS: 关注鱼影安全 模块 B 竞赛项目试题 本文件为:2024世界技能大赛某省选拔赛-模块 B …...

苹果与百度合作,将在iPhone 16中使用生成式AI

3月25日,《科创板日报》消息,苹果将与百度进行技术合作,为今年即将发布的iPhone16、Mac系统和iOS 18提供生成式AI(AIGC)功能。 据悉,苹果曾与阿里巴巴以及另外一家国产大模型厂商进行了技术合作洽谈。最终…...

java中的单例模式

一、描述 单例模式就是程序中一个类只能有一个对象实例 举个例子: //引出单例模式,一个类中只能由一个对象实例 public class Singleton1 {private static Singleton1 instance new Singleton1();//通过这个方法来获取实例public static Singleton1 getInstance…...

pytorch笔记篇:pandas之数据预处理(更新中)

pytorch笔记篇:pandas之数据预处理 pytorch笔记篇:pandas之数据预处理(更新中)测试例代码相关的算子 pytorch笔记篇:pandas之数据预处理(更新中) 测试例代码 print(train_data.iloc[0:4, [0, 1, 2, 3, -3, -2, -1]]) # (※1) 为什么test_da…...

【安全用电管理系统的应用如何保证用电安全】Acrel-6000安科瑞智慧安全用电解决方案

政策背景 国家部委 ※2017年5月3日国务院安委会召开电气火灾综合治理工作视频会议,决定在全国范围内组织开展为期3年的电气火灾综合治理工作。 公安部领导 ※公安部副部长李伟强调:向科技要战斗力,加快推进“智慧消防”建设不断提升火灾防控…...

数据分析之POWER Piovt透视表分析

将几个数据表之间进行关联 生成数据透视表 超级透视表这里的字段包含子字段 这三个月份在前面的解决办法 1.选中这三个月份,鼠标可移动的时候移动到后面 2.在原数据进行修改 添加列获取月份,借助month的函数双击日期 选择月份这列----按列排序-----选择月…...

机器人寻路算法双向A*(Bidirectional A*)算法的实现C++、Python、Matlab语言

机器人寻路算法双向A*(Bidirectional A*)算法的实现C、Python、Matlab语言 最近好久没更新,在搞华为的软件挑战赛(软挑),好卷只能说。去年还能混进32强,今年就比较迷糊了,这东西对我…...

智慧公厕产品的特点、应用场景

随着城市化进程的加速和智能科技的不断发展,智慧公厕作为城市管理的重要组成部分,逐渐成为了现代城市的一道靓丽风景线。它的特点和应用场景备受人们关注和喜爱。 智慧公厕的特点有哪些呢?首先,它智能化的设备和感应技术为其特点…...

vue 插槽(二)

渲染作用域​ 插槽内容可以访问到父组件的数据作用域&#xff0c;因为插槽内容本身是在父组件模板中定义的。举例来说&#xff1a; <span>{{ message }}</span> <FancyButton>{{ message }}</FancyButton> 这里的两个 {{ message }} 插值表达式渲染…...

【Java】MyBatis快速入门及详解

文章目录 1. MyBatis概述2. MyBatis快速入门2.1 创建项目2.2 添加依赖2.3 数据准备2.4 编写代码2.4.1 编写核心配置文件2.4.2 编写SQL映射文件2.4.3 编写Java代码 3. Mapper代理开发4. MyBatis核心配置文件5. 案例练习5.1 数据准备5.2 查询数据5.2.1 查询所有数据5.2.2 查询单条…...

Matlab将日尺度数据转化为月尺度数据

日尺度转化为月尺度 clcclear all% load datadata xlread(data.xlsx) % 例如该数据为1961-01-01至2022-12-31&#xff0c;共计22645天data data(:,1:3) % 该数据有22645行&#xff0c;数据分别为降水&#xff0c;气温&#xff0c;湿度等三列dt datetime(1961-01-01):datatim…...

【技巧】PyTorch限制GPU显存的可使用上限

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 从 PyTorch 1.4 版本开始&#xff0c;引入了一个新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device)&#xff0c;这个功能允许用户为特定的 GPU 设备设置进程可使用的显存上限比例。 测试代…...

深度理解文件操作

目录 文件 文件名&#xff1a; 标准流 文件指针 文件的打开和关闭 文件的顺序读写&#xff1a; 使用部分 文件的打开和关闭 文件 文件分两种&#xff0c;第一种是程序文件&#xff0c;后一种是数据文件。 程序文件&#xff1a;包括源程序文件&#xff08;后缀为.c&…...

【搜索引擎2】实现API方式调用ElasticSearch8接口

1、理解ElasticSearch各名词含义 ElasticSearch对比Mysql Mysql数据库Elastic SearchDatabase7.X版本前有Type&#xff0c;对比数据库中的表&#xff0c;新版取消了TableIndexRowDocumentColumnmapping Elasticsearch是使用Java开发的&#xff0c;8.1版本的ES需要JDK17及以上…...

配置小程序的服务器域名

准备工作 拥有一个已注册的域名&#xff1a;确保您已经注册了一个符合国家和地区相关法律法规要求的域名。 完成域名备案&#xff08;如有必要&#xff09;&#xff1a;根据国家和地区的法律法规&#xff0c;某些情况下可能需要对域名进行备案才能用于互联网服务。 配置 DNS&…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...