OpenCV 生成水墨质感的图片 黑暗之魂三 只狼:影逝二度

举报
悲恋花丶无心之人 发表于 2021/02/03 00:21:42 2021/02/03
【摘要】 一、原图图片和效果图 黑白版  彩色版  再来个只狼的~ 二、具体步骤 导入库 # -*- coding: UTF-8 -*-import cv2import numpy as np 读取图片,灰度图,因此第二参数为0(1则表示彩色图) # 读取图片img = cv2.imread('img.jpg', 0) 保存灰度图 # 显示并...

一、原图图片和效果图

黑白版 

彩色版 

再来个只狼的~


二、具体步骤

导入库


      # -*- coding: UTF-8 -*-
      import cv2
      import numpy as np
  
 

读取图片,灰度图,因此第二参数为0(1则表示彩色图)


      # 读取图片
      img = cv2.imread('img.jpg', 0)
  
 

保存灰度图


      # 显示并保存图片
      cv2.imshow('gray', img)
      cv2.imwrite('gray.jpg', img)
  
 


第一步:中值滤波


      # 第一步:中值滤波
      # 中值滤波
      img1 = cv2.medianBlur(img, 3)
      # 显示并保存图片
      cv2.imshow('medianBlur', img1)
      cv2.imwrite('medianBlur.jpg', img1)
  
 


第二步:图像二值化,阈值范围100到255,type=2


      # 第二步:图像二值化
      # 图像二值化
      ret, img2 = cv2.threshold(img1, 100, 255, 2, img1)  # 二值化函数
      # 显示并保存图片
      cv2.imshow('threshold', img2)
      cv2.imwrite('threshold.jpg', img2)
  
 


第三步:膨胀图像


      # 第三步:膨胀图像
      dilate_kernel = np.ones((3, 3), np.uint8)
      img3 = cv2.dilate(img2, dilate_kernel)
      # 显示并保存图片
      cv2.imshow('dilate', img3)
      cv2.imwrite('dilate.jpg', img3)
  
 


第四部:腐蚀图像


      # 第四步:腐蚀图像
      erode_kernel = np.ones((7, 7), np.uint8)
      img4 = cv2.erode(img3, erode_kernel)
      # 显示并保存图片
      cv2.imshow('erode', img4)
      cv2.imwrite('erode.jpg', img4)
  
 

到这里是不是就有水墨画的感觉了呢~


彩色图的话只需要在读取原图的时候改第二个参数为1即可


      # 读取图片
      img = cv2.imread('img.jpg', 1)
  
 


三、完整代码


      # -*- coding: UTF-8 -*-
      import cv2
      import numpy as np
      # 读取图片
      img = cv2.imread('img.jpg', 0)
      # 显示并保存图片
      cv2.imshow('gray', img)
      cv2.imwrite('gray.jpg', img)
      # 第一步:中值滤波
      # 中值滤波
      img1 = cv2.medianBlur(img, 3)
      # 显示并保存图片
      cv2.imshow('medianBlur', img1)
      cv2.imwrite('medianBlur.jpg', img1)
      # 第二步:图像二值化
      # 图像二值化
      ret, img2 = cv2.threshold(img1, 100, 255, 2, img1)  # 二值化函数
      # 显示并保存图片
      cv2.imshow('threshold', img2)
      cv2.imwrite('threshold.jpg', img2)
      # 第三步:膨胀图像
      dilate_kernel = np.ones((3, 3), np.uint8)
      img3 = cv2.dilate(img2, dilate_kernel)
      # 显示并保存图片
      cv2.imshow('dilate', img3)
      cv2.imwrite('dilate.jpg', img3)
      # 第四步:腐蚀图像
      erode_kernel = np.ones((7, 7), np.uint8)
      img4 = cv2.erode(img3, erode_kernel)
      # 显示并保存图片
      cv2.imshow('erode', img4)
      cv2.imwrite('erode.jpg', img4)
      cv2.waitKey(0)
  
 

四、生成的其他效果图

主要利用

ret, img2 = cv2.threshold(img1, 100, 255, 2, img1)  # 二值化函数
 

这个函数来生成不同的图像(按照threshold->dilate->erode顺序显示)


1.type=0

2.type=1

3.type=2(本文用到的)

4.type=3

5.type=4


彩色图


只狼

1.二值化这里把第一个值调高,我这里是200255,太低了整体的图片特别亮


      # 第二步:图像二值化
      # 图像二值化
      ret, img2 = cv2.threshold(img1, 200, 255, 2, img1)  # 二值化函数
  
 

2.腐蚀图像这里把核改为(5,5) 


      # 第四步:腐蚀图像
      erode_kernel = np.ones((5, 5), np.uint8)
      img4 = cv2.erode(img3, erode_kernel)
  
 


五、总结

 OpenCV里还有各种不同的函数用法,熟练使用就可以制作自己想要的图片啦~

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/109121628

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。