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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/573013.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

五、Elasticsearch 集成

目录 5.1 Spring Data 框架集成5.1.1 Spring Data 框架介绍5.1.2 Spring Data Elasticsearch 介绍5.1.3 Spring Data Elasticsearch 版本对比5.1.4 集成步骤 5.1 Spring Data 框架集成 5.1.1 Spring Data 框架介绍 Spring Data 是一个用于简化数据库开发的开源框架。其主要目…

springboot+vue考试管理系统

基于springboot和vue的考试管理系统 001 springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的在线考试管理系统,采用M(model)V(view)C(controller)三层体系结构&…

[2021]Zookeeper getAcl命令未授权访问漏洞概述与解决

今天在漏洞扫描的时候蹦出来一个zookeeper的漏洞问题,即使是非zookeeper的节点,或者是非集群内部节点,也可以通过nc扫描2181端口,获取极多的zk信息。关于漏洞的详细描述参考apache zookeeper官方概述:CVE-2018-8012: A…

服务器呀服务器,一个虚拟专用服务器的使用教程

目前刚接触服务器这一块的学习,这里记录一下解如何获取自己的第一台虚拟云服务器,给刚入行服务器开发的小伙伴做一个参考。 具体的步骤如下: 一、服务器的注册和获取 1、打开bwg88服务器平台地址:点击进入 https://bwh88.net/a…

自动生成测试位置吸附脚本设计思路

前言 计算一个异质结需要测试对比不同吸附位置之间的能量差异,可以直接手动建模,但是人太懒了,能交给机器的自己就别动手 问题描述 如图上所示是我计算吸附用的衬底,当原子在上面吸附时我考虑了25个(可以随便取&…

Xilinx IDDR及ODDR使用和仿真

平台:Vivado2018 官方相关文档,ug471_7Series_SelectIO.pdf 关于IDDR与ODDR Input DDR Resource(IDDR) 外部的数据在时钟的上下沿同时传输数据,我们可以使用IDDR原语将输入的单bit数据转化为2bit的数据输出。同时数据速率变为原来的二分之一…

hadoop 查询hdfs资源信息的方式

hdfs dfsadmin -report [-live][-dead][-decommissioning]

OSCP靶场--GLPI

OSCP靶场–GLPI 考点(CVE-2022-35914 php执行函数绕过ssh端口转发jetty xml RCE) 1.nmap扫描(ssh端口转发) ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.194.242 -sV -sC --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-26 22:22 EDT Nmap…

基于Rflysim平台的无人机拦截三维比例导引算法仿真

【后厂村路钢铁侠出品】 一、Rflysim简介 RflySim是一套专为科研和教育打造的Pixhawk /PX4 和MATLAB/Simulink生态系统或工具链,采用基于模型设计(Model-Based Design, MBD)的思想,可用于无人系统的控制和安全测试。…

nginx代理服务后,有关文件的操作无法执行,nginx代理jupyter或为知笔记后无法创建文件及文件夹,无法操作文件

nginx配置 server {listen 18001; # 修改转发的接口listen [::]:18001; # 修改转发的接口server_name _;root /usr/share/nginx/html;location / {proxy_pass http://127.0.0.1:7777; # 指定自己服务地址proxy_set_header Host $host;}# Load configurat…

react+redux完成登录页面及token的存取和登录保持

reactredux完成登录页面及token的存取和路由守卫 关于登录页面,我在写vue项目的时候,写了很多篇博客来记录。原因是登录确实比较复杂,涉及前后端联调、全局数据管理、浏览器本地存储等多个环节的技术。框架换成react后,逻辑是一样…