Python-opencv批量将任意图片转化为素描图

今天分享的代码主要功能是批量将任意图片转化为素描图,我转了几个效果还是不错的,你也赶快去试试吧!

代码我已编好,你拿走运行即可

# encoding=utf8

'''
Python-opencv批量将任意图片转化为素描图
'''

# 导入包
import cv2
import numpy as np
import os


# 定义方法
def dodgeNaive(image, mask):
	# 确定输入图像的形状
	width, height = image.shape[:2]
 
	# 准备与图像大小相同的输出参数
	blend = np.zeros((width, height), np.uint8)
 
	for col in range(width):
		for row in range(height):
			# 对每个像素执行此操作
			if mask[col, row] == 255:
				# 避免被零除
				blend[col, row] = 255
			else:
				# 将图像像素值移位8位
				# 除以掩模的倒数
				tmp = (image[col, row] << 8) / (255 - mask)
				# print('tmp={}'.format(tmp.shape)) # 调试代码
				# 确保结果值保持在范围内
				if tmp.any() > 255:
					tmp = 255
					blend[col, row] = tmp
 
	return blend
 
 
def dodgeV2(image, mask):
	return cv2.divide(image, 255 - mask, scale=256)
 
 
def burnV2(image, mask):
	return 255 - cv2.divide(255 - image, 255 - mask, scale=256)
 
 
def rgb_to_sketch(src_image_name, dst_image_name):
	img_rgb = cv2.imread(src_image_name)
	img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
	# 读取图片时直接转换操作
	# img_gray = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE)

	img_gray_inv = 255 - img_gray
	img_blur = cv2.GaussianBlur(img_gray_inv, ksize=(21, 21),
	                            sigmaX=0, sigmaY=0)
	img_blend = dodgeV2(img_gray, img_blur)

	# cv2.imshow('original', img_rgb) # 调试转换1
	# cv2.imshow('gray', img_gray) # 调试转换2
	# cv2.imshow('gray_inv', img_gray_inv) # 调试转换3
	# cv2.imshow('gray_blur', img_blur) # 调试转换4
	# cv2.imshow("pencil sketch", img_blend) # 调试转换5
	cv2.waitKey(0)
	cv2.destroyAllWindows()
	cv2.imwrite(dst_image_name, img_blend)


def imageSketch(imagepath, squarepath):
	'''读取图片并进行批量素描图转换'''
	files = os.listdir(imagepath) # 读取指定目录中的所有文件
	for f in files:
		file_p =  os.path.join(imagepath, f) # 图片原始位置
		squar_p = os.path.join(squarepath, f) # 素描图保存位置
		if not os.path.exists(squarepath): 
			os.mkdir(squarepath) # 如果目不存在就创建
		rgb_to_sketch(file_p, squar_p)
		print(file_p, '==>' ,squar_p)


if __name__ == '__main__':

	# 存放待处理图片的目录
	imagepath = r'D:\Test\image'

	# 图片处理结果保存目录
	squarepath = r'D:\Test\square'

	# 执行方法
	imageSketch(imagepath, squarepath)


	# src_image_name = r'D:\Test\image\24e4 (1).jpeg'
	# dst_image_name = r'D:\Test\square\24e4 (1).jpeg'
	# rgb_to_sketch(src_image_name, dst_image_name)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程工人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值