c++读取图片_不会手绘画?没关系,python帮你将图片手绘化

先看一张效果图

43c2532ec369f496f8769f988adb9cf7.png

手绘化的头条图片

python大量的第三方接口使得它用起来很方便,因为它有很多有趣的操作,获得了大量的人的喜爱。下面我们就做一件有趣的事情,将图片手绘化。下面是两种方式去操作。

cv2模块实现

准备工作,模块的安装,我的python版本是3.7,安装命令如下:

pip install opencv_pythonpip install numpy

这里命令行下载的速度太慢了,建议去官网搜索相关模块进行手动下载安装,安装命令如下:

pip install your_whl_file

安装完毕,就开始操作了,操作之前先看几个函数。

读取图片:

cv2.imread(filepath,flags)

filepath:文件的绝对路径

flags标志位如下:

  • cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
  • cv2.IMREAD_GRAYSCALE:读入灰度图片
  • cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通

颜色转换:

cv2.cvtColor(image,flags)

image:是需要转化的图片

flags是转化的格式:

  • cv2.COLOR_BGR2GRAY :BGR和灰度图的转换使用
  • cv2.COLOR_BGR2HSV:BGR和HSV的转换使用

中值滤波:

cv2.medianBlur(img,value)

image:是需要转化的图片

value:当前的方框尺寸

图片保存:

cv2.imwrite(file,image,num)

file:保存后的文件

image:是需要转化的图片

num:对jpg图片的保存质量,默认为95,损失了图片质量,可以写100

主要函数介绍完毕,上代码吧。

import cv2import osdef cartoonise(picture_name):  imgInput_FileName = r"C:甥敳獲ZXDDesktop77" + picture_name  imgOutput_FileName = r"C:甥敳獲ZXDDesktop7788" + picture_name  img_rgb = cv2.imread(imgInput_FileName)  #读取图片 #转换为灰度并且使其产生中等的模糊  a = cv2.cvtColor(img_rgb,cv2.COLOR_BGR2GRAY)  img_blur = cv2.medianBlur(a, 3) #检测到边缘并且增强其效果  img_edge = cv2.adaptiveThreshold(img_blur,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,7,7) # 保存转换后的图片  cv2.imwrite(imgOutput_FileName, img_edge)ImageList = [] #建立空的List#循环读取"D:pythonpracticeImage"中的文件名for filename in os.listdir(r"C:甥敳獲ZXDDesktop77"): if "jpg" in filename:   ImageList.append(filename)  #将文件名添加到ImageListfor i in ImageList: #循环读取ImageList中的文件名,将其进行卡通化处理 print("正在卡通化" + i) cartoonise(i)
0269bd85c24cd94716a775c3be7fdfbb.png

运行执行结果

Image模块实现

不多少了,遍历目录下的所有图片生成灰度图和手绘化图,直接上代码。

from PIL import Imageimport numpy as npimport os# 为了定义好俯视角el、方位角az与深度,将三个变量定义在前面便于调节def picture_cge(picture_name):    input_name = r"C:甥敳獲ZXDDesktop77" + picture_name    imgOutput_FileName = r"C:甥敳獲ZXDDesktop7788" + picture_name    el = np.pi / 2.2    az = np.pi / 4.    dep = 90.    # 转化为灰度图    im = Image.open(input_name)    im = im.convert('L')    im.save(r"C:甥敳獲ZXDDesktop7788" + picture_name[:-4] + "灰度." + "jpg")    # 取梯度,对图像进行重构    a = np.asarray(im).astype('float')    grd = np.gradient(a)    grd_x, grd_y = grd    grd_x = grd_x * dep / 100.    grd_y = grd_y * dep / 100.    # 制造光源效果    dx = np.cos(el) * np.cos(az)    dy = np.cos(el) * np.sin(az)    dz = np.sin(el)    uni_x = grd_x    uni_y = grd_y    uni_z = 1    b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)    b = b.clip(0, 255)    put_picture = Image.fromarray(b.astype('uint8'))    put_picture.save(r"C:甥敳獲ZXDDesktop7788" + picture_name[:-3] + "jpg")ImageList = []for filename in os.listdir(r"C:甥敳獲ZXDDesktop77"): if "jpg" in filename:   ImageList.append(filename)for i in ImageList: print("正在手绘化" + i) picture_cge(i)
6ee8d461836df61ef976db4a017502fc.png

手绘化图和灰度图

到这里就结束了,喜欢的点赞、评论、转发、关注,谢谢!

62f0971e5c055a3ed9169d0d6926f0a2.gif

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值