OpenCV 生成水墨质感的图片 黑暗之魂三 只狼:影逝二度
        【摘要】  一、原图图片和效果图 
 
黑白版  
 
彩色版  
 
再来个只狼的~ 
 
 
二、具体步骤 
导入库 
# -*- 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.二值化这里把第一个值调高,我这里是200到255,太低了整体的图片特别亮
  
   - 
    
     
    
    
     
      # 第二步:图像二值化
     
    
 
   - 
    
     
    
    
     
      # 图像二值化
     
    
 
   - 
    
     
    
    
     
      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)