简单地放几张图片感受一下 opencv识别的人体
本项目基于pycharm python3.6 和anaconda4.0做的 仅供参考
先来看一下这三个函数
加载图片 显示图片 保存图片 OpenCV函数 cv2.imread(参数1 参数2), 如img cv2.imread( IU.jpg ,0) 加载成功显示图片 没有找到图片返回none 参数1 照片名字如 xx.jpg 参数2 读入方式 省略即采用默认值 cv2.IMREAD_COLOR 彩色图 默认值(1) cv2.IMREAD_GRAYSCALE 灰度图(0) cv2.IMREAD_UNCHANGED 包含透明通道的彩色图(-1) cv2.imshow(参数1 参数2),如 cv2.imshow( IU ,img) cv2.imwrite() 如cv2.imwrite( IU.jpg , img)例子1
显示一个图片的灰度图 挑选一张图片保存到这个工程下面即可
# -*- coding: utf-8 -*- import cv2 img cv2.imread( IU.jpg ,0)#加载成功显示图片 没有找到图片返回none 第二个参数0看最后几行介绍 cv2.namedWindow( IU , cv2.WINDOW_NORMAL)#建立一个IU的窗口 参数2默认是cv2.WINDOW_AUTOSIZE 表示窗口大小自适应图片 也可以设置为cv2.WINDOW_NORMAL 表示窗口大小可调整。图片比较大的时候 可以考虑用后者。 cv2.imshow( IU ,img) cv2.waitKey(0) #让窗口显示停留 参数是等待时间 毫秒ms 。时间一到 会继续执行接下来的程序 传入0的话表示一直等待例子2
学习打开摄像头捕获照片、播放本地视频、录制视频等
打开摄像头并捕获照片 播放本地视频 录制视频 OpenCV函数 cv2.VideoCapture(), cv2.VideoWriter()
打开摄像头 并灰度化显示 键盘上按q退出
# 打开摄像头并灰度化显示 import cv2 capture cv2.VideoCapture(0) while(True): # 获取一帧 ret, frame capture.read() # 将这帧转换为灰度图 gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow( frame , gray) # 获取捕获的分辨率 # propId可以直接写数字 也可以用OpenCV的符号表示 width, height capture.get(3), capture.get(4) print(width, height) # 以原分辨率的一倍来捕获 # capture.set(cv2.CAP_PROP_frame_WIDTH, width * 2) # capture.set(cv2.CAP_PROP_frame_HEIGHT, height * 2) if cv2.waitKey(1) ord( q ): break
灰度播放一段视频
# 播放本地视频 capture cv2.VideoCapture( demo_video.mp4 ) while(capture.isOpened()): ret, frame capture.read() gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow( frame , gray) if cv2.waitKey(30) ord( q ): break
录制视频
capture cv2.VideoCapture(0) # 定义编码方式并创建VideoWriter对象 fourcc cv2.VideoWriter_fourcc(* MJPG )#FourCC是用来指定视频编码方式的四字节码。如MJPG编码可以这样写 outfile cv2.VideoWriter( output.avi , fourcc, 25., (640, 480))#输出的文件名 如 output.avi 编码方式FourCC 帧率FP 要保存的分辨率大小 while(capture.isOpened()): ret, frame capture.read() if ret: outfile.write(frame) # 写入文件 cv2.imshow( frame , frame) if cv2.waitKey(1) ord( q ): break else: break例子3
ROI
ROI Region of Interest 感兴趣区域。什么意思呢 比如我们要检测眼睛 因为眼睛肯定在脸上 所以我们感兴趣的只有脸这部分 其他都不care 所以可以单独把脸截取出来 这样就可以大大节省计算量 提高运行速度。
获取图像的ROI区域 如获取下图图片左眼的区域
先找到眼睛区域的值 运行下面代码然后移动鼠标获取像素点的x,y的值并记录下来
我记录的x y的值为 53,122 ————106,169
import cv2 img cv2.imread( pic.jpg ,1) cv2.imshow( face , img) cv2.waitKey(0)
然后切记img【先是y 后是x】 行对应y 列对应x 所以其实是img[y, x] 需要注意噢(●ˇ∀ˇ●)。容易混淆的话 可以只记行和列 行在前 列在后。
import cv2 img cv2.imread( pic.jpg ,1) p img[ 120:170, 50:100] cv2.imshow( face , p) cv2.waitKey(0)
下一个例子
import cv2 img cv2.imread( IU.jpg ,1) p img[ 594:835, 270:595] cv2.imshow( face , p) # cv2.namedWindow( IU , cv2.WINDOW_NORMAL) # cv2.imshow( IU ,img) #先运行注释掉的代码 用鼠标缺点脸部区域的坐标



