你有没有想过让一个艺术家给自己画素描呢?不用多说了,现在你就可以很容易地使用OpenCV,在几分钟内完成自己的素描画像,只需4个步骤OpenCV就会为你提供相同的肖像。

从图像1到图像2只需4个步骤。

现在让我们深入研究一下,不用拿起画笔给自己画个素描画像。

对于这个任务,我们将使用google colaboratorial,简称“Colab”,它允许你在浏览器中编写和执行Python,无需配置,可以自由访问gpu,并且可以轻松共享。

当然我们也可以使用Jupyter Notebbok。

我们的实现为四个步骤,如下所示:

  1. 将RGB彩色图像转换为灰度图像。

  2. 将灰度图像转换为负片。

  3. 使用高斯模糊方法平滑图像。

  4. 减淡和加深图像以获得最终输出。

入门

因此,第一步是加载图像并将其转换为灰度图像。

我的图像是在我的谷歌硬盘上,所以我们必须在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生成自己的素描画像相关推荐

  1. 使用Python,OpenCV生成Aruco标记

    这篇博客将介绍Aruco标记是什么,以及如何使用Python,OpenCV生成Aruco标记.本文提供俩种生成方式:在线生成和代码生成: 使用OpenCV处理ArUco标签非常简单,因为OpenCV库 ...

  2. 计算机视觉之--使用opencv生成简笔画小视频

    本教程介绍了如何使用opencv生成一副简笔画视频,包括片头.如何做画等. 1.视频包括: (1)片头:包括学号姓名,同时会出现"I Love CV"在学号和姓名的中央,而且他们是 ...

  3. 关于如何在XP系统上运行opencv生成的C++动态库

    先讲下为什么要在xp系统上运行opencv生成的C++动态库,原因是我做了一个图像检测项目,使用C#编写的,C#里有个opencvsharp图像处理包,对于C#程序员调用在舒服不过了,但是!客户比较守 ...

  4. 基于 C++ OpenCV 生成小视频【100010476】

    制作个人小视频 一.实验内容和要求 基于 OpenCV 生成小视频,制作有浙大元素的图片和个人信息的片头,自己设计情节,其中要缓慢地画一张画面,最后自己设计一个片尾. 做了一个火柴人初见了 OpenC ...

  5. 用opencv给彦女王生成一副蒙太奇画像

    建了一个qq群:222954293,既方便大家一起交流学习,还可以传一些程序文件,欢迎大家加入交流.程序源码我就放群里啦. 前言 大家好呀,前两天烈阳天道1上映了,不知道大家看没看呢,里面还有一小段彦 ...

  6. 生成step文件_利用opencv给彦女王生成一副蒙太奇画像

    大家好呀,前两天烈阳天道1上映了,不知道大家看没看呢,里面还有一小段彦穿越虫洞与猴哥相遇的画面,彦女王啊啊啊~~ 所以我去网上爬了二百来张我大学的风景画,然后找了以前存的彦女王的图片,生成了一幅蒙太奇 ...

  7. 【opencv实战】图像素描及卡通化

    因为要做一个项目,为了实现他的趣味性,所以想应用图像处理做一些东西,最先想到的就是素描和卡通化,所以通过一番辛苦的查询及改错,最终完成一个简单小功能. 一.实现原理 应用opencv将图片进行卡通化处 ...

  8. python opencv生成模糊图像

    去除由于对焦,运动等造成的模糊图像,所以在构建数据集的时候考虑用opencv对清晰的图片进行处理获得模糊的图片从而进行训练. 1) 运动模糊图像 一般来说,运动模糊的图像都是朝同一方向运动的,那么就可 ...

  9. opencv生成日志_OpenCV在Android环境下的使用方法

    按照使用语言角度,在Android下使用OpenCV有以下几种方式: 完全使用Java语言 完全使用C++语言 混合使用Java和C++语言 下面分别讲一下怎么做,并说明这样做可能需要注意的问题. 完 ...

最新文章

  1. java培训班如何选择
  2. sublime配置python3环境_【env】Sublime配置Python3开发环境
  3. 为什么脚本执行一行就不动了_Centos7 批量创建用户账号脚本
  4. jenkins修改pom文件_jenkins使用小技巧:pom.xml文件里的版本随着每次发布变化怎么办?...
  5. java8 functionalinterface注解_@FunctionalInterface注解的使用
  6. 手机桌面没有计算机图标,手机桌面图标不见了,更改桌面图标的大小-
  7. 解决jupyter notebook输出显示不完整问题
  8. java安装没有jdk文件_java文件在没有安装jdk的windows下运行。
  9. 《终身成长》卡罗尔 德韦克_epub+mobi+azw3
  10. 初次接触面元法对螺旋桨的性能预报,发现之前很多学者都是用fortran进行编程进行性能预报,为什么不用matlab呢,两者的差异在哪里,建议初学者用这哪个软件呢
  11. 上位机和下位机通信故障判断方法
  12. gg修改器修改数值没有用怎么办_GG修改器修改完成然而被修改数值还是不变。?...
  13. 如何PDF转WORD文档?这三个方法分享给你
  14. 网桥 网卡网桥有什么区别
  15. 10分钟让你掌握Linux常用命令(+2万+++收藏)
  16. Ubuntu配置静态IP以及interfaces配置不生效问题解决
  17. python求斜边上的高是多少厘米_已知一个直角三角形的两条直角边,如何求斜边上的高的长度...
  18. 苹果要求部分员工佩戴警用级随身摄像头
  19. MySQl排序,别名
  20. Finished with error: ProcessException: ProcessXXXXXXXexited abnormally 的解决方法

热门文章

  1. 为何租车企业会出项规模不一?
  2. [数据库] SQL查询语句表行列转换及一行数据转换成两列
  3. 诗歌(5)—满庭芳(蜗角虚名)
  4. 理头绪--写在懈怠时
  5. pycharm、anaconda、pytorch安装以及环境配置(超详细教程)
  6. intellij idea 设置编码
  7. 身份证过期三个月内是否还能坐高铁
  8. 台式电脑计算机未输出任何信号源,电脑开不了机怎么办 驱动人生教你拯救电脑...
  9. js实现input框添加移除属性
  10. 【OpenCV】(五)图像直方图操作