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.二值化这里把第一个值调高,我这里是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里还有各种不同的函数用法,熟练使用就可以制作自己想要的图片啦~