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

一、原图图片和效果图

黑白版 

彩色版 

再来个只狼的~


二、具体步骤

导入库

# -*- 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里还有各种不同的函数用法,熟练使用就可以制作自己想要的图片啦~

悲恋花丶无心之人 CSDN认证博客专家 深度学习 神经网络 Pytorch
计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
个人GitHub网址为:https://github.com/nickhuang1996
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值