视频转素描
线程部分代码可以忽略
# -*- coding:utf-8 -*-
import cv2
from PIL import Image, ImageOps, ImageFilter
import numpy
from threading import Thread # 创建线程的模块
# 透明度转换 素描转换的一部分
def dodge(a, b, alpha):
# alpha为图片透明度
return min(int(a * 255 / (256 - b * alpha)), 255)
# 图片转换为素描
def toSketchStyle(img, blur=25, alpha=1.0):
# image = Image.fromarray()
imagegry = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
image_inver = ~imagegry
cv2.imshow("imagegry",imagegry)
image = cv2.GaussianBlur(image_inver,(15,15),50,50)
des = cv2.divide(imagegry, 255-image,scale=255);
# 将文件转成灰色
cv2.imshow("OpenCV",des)
# 获取摄像头0表示第一个摄像头
cap = cv2.VideoCapture("img\MVI_1421.MP4")
while (1): # 逐帧显示
ret, img = cap.read()
cv2.imshow("Image", img)
# 开启线程 参数1:方法名(不要带括号) 参数2:参数(元祖) 返回对象
# p = Thread(target=toSketchStyle, args=(img))
# p.start() # 只是给操作系统发送了一个就绪信号,并不是执行。操作系统接收信号后安排cpu运行
toSketchStyle(img)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
cap.release() # 释放摄像头
cv2.destroyAllWindows() # 释放窗口资源