opencv学习
来源:互联网 发布:淘宝查看vip等级 编辑:程序博客网 时间:2024/06/16 09:03
系统环境:
ubuntu14.04
python2.7.6
opencv3
1、图像读取
The AT&T Facedatabase(http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html)又称ORL人脸数据库,40个人,每人10张照片。照片在不同时间、不同光照、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集。所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有有轻微旋转)
1 #coding=utf-8 2 3 import cv2 4 5 # 读取照片信息, OpenCV目前支持bmp、jpg、jpeg、png、pbm、pgm、ppm、ras、tiff、tif等格式 6 imgPath = "/home/shuifu/bagfiles/image_video/s1/1.pgm" 7 img = cv2.imread(imgPath) 8 9 # 创建一个叫image的窗口 10 cv2.namedWindow("Image") 11 12 # 在创建的窗口中显示图像 13 cv2.imshow("Image", img) 14 15 # 如果不添加,在IDLE执行窗口直接无响应。在命令行中执行的话,则是一闪而过。 16 cv2.waitKey(0) 17 18 19 # 释放窗口 20 cv2.destroyAllWindows()
2、图像的创建/复制
1 #coding=utf-8 2 3 import cv2 4 import numpy as np 5 6 imgPath = "/home/shuifu/bagfiles/Image/xalg001.jpg" 7 8 # 读取图片 9 img = cv2.imread(imgPath) 10 11 # 新opencv没有CreateImage接口,即没有cv2.CreateImage这样的函数,使用numpy函数 12 # 图像使用NumPy数组的属性来表示图像的尺寸和通道信息。 13 # 输出img.shape将得到(500,375,3),最后的3表示这是一个RGB图像 14 emptyImage = np.zeros(img.shape, np.uint8) 15 16 # 也可以复制原有的图像获得一副新图像 17 emptyImage2 = img.copy() 18 19 # 还可以用cvtColor获得原图像的副本 20 emptyImage3 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 21 # emptyImage3[...]=0是将其转成空白的黑色图像 22 23 # 显示图片 24 cv2.imshow("Image", img) 25 cv2.imshow("EmptyImage", emptyImage) 26 cv2.imshow("EmptyImage2", emptyImage) 27 cv2.imshow("EmptyImage3", emptyImage) 28 29 # 保存图像 30 # 第一个参数是保存的路径及文件名, 第二个参数是图像矩阵 31 # 第三个是可选参数,针对特定格式:对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 32 # 注意,cv2.IMWRITE_JPEG_QUALITY类型为long,必须转换成int 33 # 对于PNG,第三个参数表示压缩级别,从0-9压缩级别,级别越高,图像尺寸越小。默认级别为3。 34 cv2.imwrite("/home/shuifu/bagfiles/Image/xalg_zp_01.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 5]) 35 cv2.imwrite("/home/shuifu/bagfiles/Image/xalg_zp_02.jpg", img, [int(cv2.IMWRITE_JPEG_QUALITY), 100]) 36 cv2.imwrite("/home/shuifu/bagfiles/Image/xalg_zp_01.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 0]) 37 cv2.imwrite("/home/shuifu/bagfiles/Image/xalg_zp_02.png", img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9]) 38 39 cv2.waitKey(0) 40 41 cv2.destroyAllWindows()
3、保存视频
1 #coding=utf-8 2 3 import cv2 4 5 # VideoCapture()函数定义摄像头对象,其参数0表示第一个摄像头 6 capture = cv2.VideoCapture(0) 7 8 # 设置图片格式 9 # 将capture保存为motion-jpeg, cv_fourcc为保存格式 10 # Motion JPEG(MJPEG,Motion Joint Photographic Experts Group,FourCC:MJPG)是一种视频压缩格式,其中每一帧图像都分别使用JPEG编码 11 # size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) ) 12 capture.set(3, 640) 13 capture.set(4, 480) 14 capture.set(1, 10.0) 15 16 # cv_fourcc值要设置对, 不然无法写入, 而且不报错 17 fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 18 19 # 第三个参数则是镜头快慢的,10为正常,小于10为慢镜头 20 video = cv2.VideoWriter("/home/shuifu/bagfiles/Video/myVideo.avi", fourcc, 10, (640, 480)) 21 22 # isOpened验证摄像头是否开启 23 while (capture.isOpened()): 24 ret, frame = capture.read() 25 if ret == True: 26 # 图片操作cv2.flip(img, flipcode)翻转图像 27 # flipcode =0 沿x轴翻转;>0 沿y轴翻转;<0 x,y轴同时翻转 28 frame = cv2.flip(frame, 1) 29 30 # 获取gray图片 31 # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 32 33 # 视频中的图片一张张写入 34 video.write(frame) 35 36 # 显示图片 37 cv2.imshow("frame", frame) 38 39 # ord为键盘输入对应的整数 40 if cv2.waitKey(1) & 0xFF == ord("q"): 41 break 42 else: 43 break 44 45 # 如果不用release方法的话无法存储, 要等结束程序再等摄像头关了才能显示保持成功 46 video.release() 47 48 # 关闭摄像头,关闭窗口 49 capture.release() 50 cv2.destroyAllWindows()
4、摄像头拍照
1 2 import cv2 3 4 capture = cv2.VideoCapture(0) 5 6 num = 0 7 while(capture.isOpened() and num < 5): 8 # get a frame 9 ret, frame = capture.read() 10 # show a frame 11 cv2.imshow("capture", frame) 12 if cv2.waitKey(1) & 0xFF == ord("q"): 13 num += 1 14 cv2.imwrite("/home/shuifu/bagfiles/image_video/s41/test%s.jpeg"%(str(num)) , frame) 15 continue 16 17 capture.release() 18 cv2.destroyAllWindows()
5、自己人脸数据收集
读取图片img=cv2.imread(image_name)显示图片cv2.imshow("This is a window!", img) # img为上面读取图片的句柄灰度转换cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # img为上面读取图片的句柄画图cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])参数: img -> Image pt1 -> Vertex of the rectangle pt2 -> Vertex of the rectangle opposite to pt1 color -> Rectangle color or brightness(grayscale image)保存图片cv2.imwrite(filename, image[, params])等待输入cv2.waitKey(delay) 功能:waitKey等待一个键盘输入事件,如果delay的值小于等于0,则无限等待,如果delay的值大于0,则等待delay(毫秒)
1 #coding=utf-8 2 3 import cv2 4 5 # 识别人脸 6 def detectFaces(image_name): 7 # 读取图片 8 img = cv2.imread(image_name) 9 10 # 获取训练好的人脸的参数数据,这里直接使用opencv默认值 11 # 脸部特征分类地址 12 cascade_fn = "/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml" 13 # 读取分类器 14 face_cascade = cv2.CascadeClassifier(cascade_fn) 15 16 # if语句:如果img维度为3,说明不是灰度图,先转换为灰度图gray,如果不为3,也就是2,原图就是灰度图 17 if img.ndim == 3: 18 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 19 else: 20 gray = img 21 22 # 探测人脸 23 faces = face_cascade.detectMultiScale( # faces表示检测到的人脸目标序列 24 gray, # gray表示的是要检测的输入图像为gray 25 scaleFactor = 1.15, # 表示每次图像尺寸减小的比例为1.15 26 minNeighbors = 5, # 表示每一个目标至少要被检测到4次才算是真的目标(因为周围的像素和窗口大小都可以检测到人脸) 27 minSize = (5, 5), # 目标的最小最大尺寸 28 flags = cv2.CASCADE_SCALE_IMAGE # 表示不是缩放分类器来检测,而是缩放图像 29 ) 30 31 result = [] 32 for(x, y, width, height) in faces: 33 result.append((x, y, x + width, y + height)) 34 return result 35 36 def drawFaces(image_name): 37 print("hello image_name") 38 faces = detectFaces(image_name) 39 if faces: 40 img = cv2.imread(image_name) 41 print("hello img_new_name") 42 for(x1, y1, x2, y2) in faces: 43 cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0)) 44 # img_new_name = "/home/shuifu/bagfiles/Image/new_image.jpg" 45 # cv2.imwrite(img_new_name, img) 46 # 显示图像 47 # image = cv2.imread(img_new_name) 48 cv2.imshow("Find Faces!", img) 49 cv2.imwrite("/home/shuifu/bagfiles/Image/new_image.jpg",img) 50 cv2.waitKey(0) 51 else: 52 print("not found faces") 53 54 if __name__ == "__main__": 55 imgPath = "/home/shuifu/bagfiles/Image/005.jpg" 56 drawFaces(imgPath)
1 #coding=utf-8 2 3 import cv2 4 5 def camera(): 6 capture = cv2.VideoCapture(0) 7 index = 1 8 while capture.isOpened(): 9 # 返回一个元组,retval和image,retval是用来检查是否读入成功 10 ok, frame = capture.read() 11 if not ok: 12 break 13 else: 14 cv2.imshow("myPicture", frame) 15 # 转为灰度图 16 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 17 # 改变图片大小 18 dst = cv2.resize(gray, (92, 112)) 19 key = cv2.waitKey(100) 20 # a拍照 21 if key & 0xFF == ord("a"): 22 filename = "/home/shuifu/bagfiles/image_video/s41/%d.pgm"%index 23 index += 1 24 cv2.imwrite(filename, dst) 25 # q推出 26 elif key & 0xFF == ord("q"): 27 break 28 else: 29 continue 30 capture.release() 31 cv2.destroyAllWindows() 32 33 if __name__ == "__main__": 34 camera()
1 #coding=utf-8 2 3 def createFile(): 4 # Information 5 info = "/home/shuifu/bagfiles/image_video/s{0}/{1}.pgm;{2}\n" 6 7 # Input filename 8 name = raw_input("Enter file name:") 9 10 filename = "/home/shuifu/bagfiles/%s"%name 11 12 fp = open(filename, "w") 13 14 for i in range(1, 42): 15 for j in range(1, 11): 16 fp.write(info.format(i, j, i-1)) 17 18 fp.close() 19 20 if __name__ == "__main__": 21 createFile()
备注参考:
http://blog.csdn.net/sunny2038/article/details/9057415
http://blog.csdn.net/xingchenbingbuyu/article/details/51386949
http://blog.csdn.net/HUSTcanpi/article/details/50625533
http://blog.csdn.net/xwm1000/article/details/71788344
阅读全文
0 0
- [OpenCV]Opencv学习日记
- opencv学习
- opencv学习
- opencv学习
- opencv学习
- opencv学习
- OpenCV学习
- 学习OpenCV
- 学习opencv
- 学习OPENCV
- opencv学习
- 学习opencv
- opencv学习
- OpenCV学习
- 学习opencv
- 学习opencv
- opencv 学习
- OpenCV学习
- 安卓地图兴趣点 聚合加载
- golang 文件读取
- android缩放图片添加文字信息
- Android端 APP GPU过度绘制及优化
- HMM MEMM CRF 区别 联系
- opencv学习
- Lucene打分公式的数学推导
- 关于 Error:Failed to resolve: androidAppFreamwork:baselibrary:unspecified 的解决方式
- MinGW MinGW-w64 TDM-GCC等工具链之间的区别与联系
- node
- 3.数组和链表的区别及优缺点
- phpstorm常用快捷键大全
- 阻塞队列和非阻塞队列
- template模板一