使用OpenCV生成自己的素描画像
你有没有想过让一个艺术家给自己画素描呢?不用多说了,现在你就可以很容易地使用OpenCV,在几分钟内完成自己的素描画像,只需4个步骤OpenCV就会为你提供相同的肖像。
从图像1到图像2只需4个步骤。
现在让我们深入研究一下,不用拿起画笔给自己画个素描画像。
对于这个任务,我们将使用google colaboratorial,简称“Colab”,它允许你在浏览器中编写和执行Python,无需配置,可以自由访问gpu,并且可以轻松共享。
当然我们也可以使用Jupyter Notebbok。
我们的实现为四个步骤,如下所示:
将RGB彩色图像转换为灰度图像。
将灰度图像转换为负片。
使用高斯模糊方法平滑图像。
减淡和加深图像以获得最终输出。
入门
因此,第一步是加载图像并将其转换为灰度图像。
我的图像是在我的谷歌硬盘上,所以我们必须在collaboratory上安装驱动器。
你可以使用以下代码执行此操作:
from google.colab import drive
drive.mount(‘content/drive’)
当你运行这个命令时,你会发现一个需要访问的google认证链接,可以通过该链接复制认证代码并使用硬盘中的内容。
接下来导入必要的库,我们需要导入cv2模块务,另外,由于cv2模块的imshow函数不能与google colab一起使用,我们需要使用另一种方法来查看图像。
from google.colab.patches import cv2_imshow
import cv2
img=cv2.imread(‘Picture.jpg’)
cv2_imshow(img)
将RGB彩色图像转换为素描的灰度图像
现在我们有了图像,我们将其转换为灰度,以便稍后使用cv2模块中的cvtColor方法将其转换为负片,该方法也可以将图像转换为HSV和RGB格式。
gray=cv2.cvtColor(img.cv2_COLOR_BGR2GRAY)
cv2_imshow(gray)
将灰度图像转换为负片
灰度图像需要使用位操作转换为负片。位操用于提取图像中的基本部分。
我们将通过反转0-255之间的灰度图像的像素来获得图像的负片。为了反转图像,我们将使用cv2模块中的bitwise_not方法。
img_invert=cv2.bitwise_not(gray)
cv2_imshow(img_invert)
使用高斯模糊平滑图像
在图像处理中,高斯模糊(也称为高斯平滑)是使用高斯函数使图像模糊,它是图形软件中广泛使用的一种方法,通常用于减少图像噪声和细节。
在该方法中,使用高斯核代替由等滤波器系数组成的盒形滤波器,这通过函数cv2.GaussianBlur来完成:
gblur_img=cv2.GaussianBlur(img_invert,(21,21),sigmaX=0,sigmaY=0)cv2_imshow(gblur_img)
你可以根据你的适合性更改核大小,并查看输出如何变化。你可以使用以下链接来了解更多关于核的知识:https://www.pyimagesearch.com/2016/07/25/convolutions-with-opencv-and-python/
减淡和加深图像以获得最终输出
减淡和加深是传统摄影在印刷过程中采用的技术。在传统摄影中,人们会试图通过控制曝光时间来使暗室中的某个区域变亮或变暗。减淡使图像变亮,而加深使它变暗。
像Photoshop这样的现代图像编辑工具提供了模仿这些传统技术的方法,例如,使用遮罩B的图像A的避色实现如下:
((B[idx] == 255) ? B[idx] : min(255, ((A[idx] << 8) / (255-B[idx]))))
这实际上是将图像像素A的灰度(或通道)值除以掩模像素值B[idx]的倒数,同时确保得到的像素值在范围[0255]内,并且我们不被零除。我们可以将其转换为一个简单的Python函数,该函数接受两个OpenCV矩阵(一个图像和一个掩码)并返回混合图像。
幸运的是,在Opencv的帮助下,我们只需使用很少的代码就可以做到这一点。
这里我们创建自定义函数dodge_img,它将灰度图像和反转图像作为掩码来作为函数的参数,然后将图像转换为减淡图像。
def dodge_img(x,y):return cv2.divide(x,255-y,scale=256)dodged_img=dodge_img(gray,gblur_img)
cv2_imshow(dodged_img)
会产生以下结果:
现在要执行加深,我们再次创建一个自定义函数burn_img,该函数将减淡图像和平滑图像作为函数的参数,该函数将使图像变暗,从而执行图像的加深。
def burn_img(image, mask):return 255 — cv2.divide(255-image, 255-mask, scale=256)final_image=burn_img(dodged_img,gblur_img)
最后,我们画出了这幅原图:
这是你使用OpenCV绘制处理素描图像。
☆ END ☆
如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。
↓扫描二维码添加小编↓
使用OpenCV生成自己的素描画像相关推荐
- 使用Python,OpenCV生成Aruco标记
这篇博客将介绍Aruco标记是什么,以及如何使用Python,OpenCV生成Aruco标记.本文提供俩种生成方式:在线生成和代码生成: 使用OpenCV处理ArUco标签非常简单,因为OpenCV库 ...
- 计算机视觉之--使用opencv生成简笔画小视频
本教程介绍了如何使用opencv生成一副简笔画视频,包括片头.如何做画等. 1.视频包括: (1)片头:包括学号姓名,同时会出现"I Love CV"在学号和姓名的中央,而且他们是 ...
- 关于如何在XP系统上运行opencv生成的C++动态库
先讲下为什么要在xp系统上运行opencv生成的C++动态库,原因是我做了一个图像检测项目,使用C#编写的,C#里有个opencvsharp图像处理包,对于C#程序员调用在舒服不过了,但是!客户比较守 ...
- 基于 C++ OpenCV 生成小视频【100010476】
制作个人小视频 一.实验内容和要求 基于 OpenCV 生成小视频,制作有浙大元素的图片和个人信息的片头,自己设计情节,其中要缓慢地画一张画面,最后自己设计一个片尾. 做了一个火柴人初见了 OpenC ...
- 用opencv给彦女王生成一副蒙太奇画像
建了一个qq群:222954293,既方便大家一起交流学习,还可以传一些程序文件,欢迎大家加入交流.程序源码我就放群里啦. 前言 大家好呀,前两天烈阳天道1上映了,不知道大家看没看呢,里面还有一小段彦 ...
- 生成step文件_利用opencv给彦女王生成一副蒙太奇画像
大家好呀,前两天烈阳天道1上映了,不知道大家看没看呢,里面还有一小段彦穿越虫洞与猴哥相遇的画面,彦女王啊啊啊~~ 所以我去网上爬了二百来张我大学的风景画,然后找了以前存的彦女王的图片,生成了一幅蒙太奇 ...
- 【opencv实战】图像素描及卡通化
因为要做一个项目,为了实现他的趣味性,所以想应用图像处理做一些东西,最先想到的就是素描和卡通化,所以通过一番辛苦的查询及改错,最终完成一个简单小功能. 一.实现原理 应用opencv将图片进行卡通化处 ...
- python opencv生成模糊图像
去除由于对焦,运动等造成的模糊图像,所以在构建数据集的时候考虑用opencv对清晰的图片进行处理获得模糊的图片从而进行训练. 1) 运动模糊图像 一般来说,运动模糊的图像都是朝同一方向运动的,那么就可 ...
- opencv生成日志_OpenCV在Android环境下的使用方法
按照使用语言角度,在Android下使用OpenCV有以下几种方式: 完全使用Java语言 完全使用C++语言 混合使用Java和C++语言 下面分别讲一下怎么做,并说明这样做可能需要注意的问题. 完 ...
最新文章
- java培训班如何选择
- sublime配置python3环境_【env】Sublime配置Python3开发环境
- 为什么脚本执行一行就不动了_Centos7 批量创建用户账号脚本
- jenkins修改pom文件_jenkins使用小技巧:pom.xml文件里的版本随着每次发布变化怎么办?...
- java8 functionalinterface注解_@FunctionalInterface注解的使用
- 手机桌面没有计算机图标,手机桌面图标不见了,更改桌面图标的大小-
- 解决jupyter notebook输出显示不完整问题
- java安装没有jdk文件_java文件在没有安装jdk的windows下运行。
- 《终身成长》卡罗尔 德韦克_epub+mobi+azw3
- 初次接触面元法对螺旋桨的性能预报,发现之前很多学者都是用fortran进行编程进行性能预报,为什么不用matlab呢,两者的差异在哪里,建议初学者用这哪个软件呢
- 上位机和下位机通信故障判断方法
- gg修改器修改数值没有用怎么办_GG修改器修改完成然而被修改数值还是不变。?...
- 如何PDF转WORD文档?这三个方法分享给你
- 网桥 网卡网桥有什么区别
- 10分钟让你掌握Linux常用命令(+2万+++收藏)
- Ubuntu配置静态IP以及interfaces配置不生效问题解决
- python求斜边上的高是多少厘米_已知一个直角三角形的两条直角边,如何求斜边上的高的长度...
- 苹果要求部分员工佩戴警用级随身摄像头
- MySQl排序,别名
- Finished with error: ProcessException: ProcessXXXXXXXexited abnormally 的解决方法