赞
踩
本文包括:
**
**
python-opencv依赖numpy、matplotlib,因此这两个包也是需要安装的,直接pip安装命令即可:
1.sudo pip3 install numpy
2.sudo pip3 install Matplotlib
然后直接安装python-opencv:
3.sudo pip3 install opencv-python (很多教程是 这个命令:sudo pip install python-opencv
但是我安不上)
**
**
学习用测试代码(python代码):
import cv2 import numpy as np if __name__=="__main__": print("start") d = path.dirname('.'); patrentPath = path.abspath(d) print(patrentPath) imgBgPath = patrentPath + "/img/testBg.png" imgSmallPath = patrentPath + "/img/testSmall.png" # imgBgPath = patrentPath + "/img/testBg.jpg" # imgSmallPath = patrentPath + "/img/testSmall.jpg" # 我们加载了两个图像,转换为灰度。 我们保留原始的 RGB 图像,并创建一个灰度版本。 我之前提到过这个,但是我们这样做的原因是,我们在灰度版本上执行所有的处理,然后在彩色图像上使用相同的标签来标记。 img_rgb = cv2.imread(imgBgPath, -1) # cv2.imshow('123', img_rgb) # print(img_rgb) img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template = cv2.imread(imgSmallPath,0) w, h = template.shape[::-1] # 对于主要图像,我们只有彩色版本和灰度版本。 我们加载模板并记下尺寸。 #在这里,我们用img_gray(我们的主图像),模板,和我们要使用的匹配方法调用matchTemplate,并将返回值称为res。 我们指定一个阈值,这里是 80%。 然后我们使用逻辑语句,找到res大于或等于 80% 的位置。 res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED) threshold = 0.9 loc = np.where( res >= threshold) # 最后,我们使用灰度图像中找到的坐标,标记原始图像上的所有匹配: for pt in zip(*loc[::-1]): cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,255,255), 2) cv2.imshow('targetImg',img_rgb) print(pt) # 等待 不关闭图片 cv2.waitKey()
**
**
常用方法================================
propId 常见取值如下:(以下为 Opencv-Python 3.x 的格式,在 Opencv-Python 2.x 中,需加上前缀 CV_)
“”"
cv2.CAP_PROP_POS_MSEC: 视频文件的当前位置(ms)
cv2.CAP_PROP_POS_FRAMES: 从0开始索引帧,帧位置。
cv2.CAP_PROP_POS_AVI_RATIO:视频文件的相对位置(0表示开始,1表示结束)
cv2.CAP_PROP_FRAME_WIDTH: 视频流的帧宽度。
cv2.CAP_PROP_FRAME_HEIGHT: 视频流的帧高度。
cv2.CAP_PROP_FPS: 帧率
cv2.CAP_PROP_FOURCC: 编解码器四字符代码
cv2.CAP_PROP_FRAME_COUNT: 视频文件的帧数
cv2.CAP_PROP_FORMAT: retrieve()返回的Mat对象的格式。
cv2.CAP_PROP_MODE: 后端专用的值,指示当前捕获模式
cv2.CAP_PROP_BRIGHTNESS:图像的亮度,仅适用于支持的相机
cv2.CAP_PROP_CONTRAST: 图像对比度,仅适用于相机
cv2.CAP_PROP_SATURATION:图像饱和度,仅适用于相机
cv2.CAP_PROP_HUE: 图像色调,仅适用于相机
cv2.CAP_PROP_GAIN: 图像增益,仅适用于支持的相机
cv2.CAP_PROP_EXPOSURE: 曝光,仅适用于支持的相机
cv2.CAP_PROP_CONVERT_RGB:布尔标志,指示是否应将图像转换为RGB。
“”"
#grab, retrieve, read 的关系
Grabs the next frame from video file or capturing device.
retval = cv2.VideoCapture.grab()
#Decodes and returns the grabbed video frame.
retval, image = cv2.VideoCapture.retrieve([, image[, flag]])
Grabs, decodes and returns the next video frame.
retval, image = cv2.VideoCapture.read([,image])
由上可知,read 是 grab 和 retrieve 的结合体。当不需要当前的帧或画面时,可以使用 grab 跳过,以减少 read 所耗费的额外时间。
**
**
测试代码
# 磨皮1 def beauty_face(img): ''' Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100 ; https://my.oschina.net/wujux/blog/1563461 ''' dst = np.zeros_like(img) #int value1 = 3, value2 = 1; 磨皮程度与细节程度的确定 v1 = 3 v2 = 1 dx = v1 * 5 # 双边滤波参数之一 fc = v1 * 12.5 # 双边滤波参数之一 p = 0.1 temp4 = np.zeros_like(img) temp1 = cv2.bilateralFilter(img,dx,fc,fc) temp2 = cv2.subtract(temp1,img) temp2 = cv2.add(temp2,(10,10,10,128)) temp3 = cv2.GaussianBlur(temp2,(2*v2 - 1,2*v2-1),0) temp4 = cv2.add(img,temp3) dst = cv2.addWeighted(img,p,temp4,1-p,0.0) dst = cv2.add(dst,(10, 10, 10,255)) return dst def beauty_face2(src): ''' Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100 ; ''' dst = np.zeros_like(src) #int value1 = 3, value2 = 1; 磨皮程度与细节程度的确定 v1 = 3 v2 = 1 dx = v1 * 5 # 双边滤波参数之一 fc = v1 * 12.5 # 双边滤波参数之一 p = 0.1 temp4 = np.zeros_like(src) temp1 = cv2.bilateralFilter(src,dx,fc,fc) temp2 = cv2.subtract(temp1,src) temp2 = cv2.add(temp2, (10,10,10,128)) temp3 = cv2.GaussianBlur(temp2,(2*v2 - 1,2*v2-1),0) temp4 = cv2.subtract(cv2.add(cv2.add(temp3, temp3), src), (10, 10, 10, 255)) dst = cv2.addWeighted(src,p,temp4,1-p,0.0) dst = cv2.add(dst, (10, 10, 10,255)) return dst import numpy as np import cv2 # VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频 cap = cv2.VideoCapture('/Users/lby/Work/htsw/testOpenCV/p2.mp4') # 视频输出相关 filePath = '/Users/lby/Work/htsw/testOpenCV/example1.avi' fourcc = cv2.VideoWriter_fourcc(*'XVID') # 创建 VideoWriter 实例 fps = cap.get(cv2.CAP_PROP_FPS) # 获取 VideoCapture 的 FPS frameSize = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) # 获取视频的 VideoCapture 的 Size out = cv2.VideoWriter(filePath, fourcc, fps, frameSize) while(cap.isOpened()): # 测试用,查看视频size # size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), # int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) # print('size:'+repr(size)) #ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。 ret, frame = cap.read() if ret: gray_lwpCV = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) blur3 = beauty_face(frame) cv2.imshow('frame',blur3) # 输出 out.write(blur3) # waitKey()方法本身表示等待键盘输入, # 参数是1,表示延时1ms切换到下一帧图像,对于视频而言; # 参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,; # 参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。 if cv2.waitKey(5) & 0xFF == ord('q'): break else: break # 释放获取设备 cap.release() # 释放视频写入实例 out.release() # 删除所有建立的窗口 cv2.destroyAllWindows()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。