opencv computer vison
来源:互联网 发布:淘宝宝贝突然下架 编辑:程序博客网 时间:2024/06/04 00:51
chart 2:Handing Files,Camera,GUI
1.Basic I/O scripts
文件的读写:
path="image_file='/Users/mac/Downloads/aa.jpg'"image=cv2.imread(path) #原图读出#opencv 3将cv2.CV_LOAD_IMAGE_GRAYSCALE包放入到cv2的IMREAD_GRAYSCALE中,下面是灰度读出,灰度存储image=cv2.imread(path,cv2.IMREAD_GRAYSCALE)cv2.imwrite("aacopy.jpg",image)#若BRG读取image=cv2.imread(path,cv2.IMREAD_COLOR)
图像和字节的转换:
opencv图像是2D和3D的numpy.array类型,8位的灰度图是2D,24位的BRG图像是3D的。image[0,0]第一个表x轴即行,第二个数是表示y轴即列,image[0,0,0]第三个索引表的是颜色通道。image[0,0]表示是最左边的像素点。如果是8位的灰度图在左上角的白色的像素点的颜色是255,如果是BGR图像Blue的颜色是[255,0,0]
*注意:bytearray和bytes不一样的地方在于,bytearray是可变的。
转换成8位字节数组
byteArray = bytearray(image)grayImage = numpy.array(grayByteArray).reshape(height, width) #灰度图,将转换好的字符串数组grayByteArray转换成array数组,灰度图为2维的,故只经给出高,宽即可bgrImage=np.array(bytearray).reshape(300.600,3)#RGB图则为3维的,则除了要给出高度,宽度外还要给出颜色通道
OpenCV中图像的通道可以是1、2、3和4,
1通道的是灰度图。
3通道的是彩色图像,比如RGB图像。
4通道的图像是RGBA,是RGB加上一个A通道,也叫alpha通道,表示透明度。PNG图像是一种典型的4通道图像。
2通道的图像是RGB555和RGB565。2通道图在程序处理中会用到,如傅里叶变换,可能会用到,一个通道为实数,一个通道为虚数,主要是编程方便。
例:#让我们把含有随机字节的ByteArray转换成灰度图像和BGR图像
import cv2import numpyimport os#产生一个120,000随机字节的数组randomByteArray=bytearray(os.urandom(120000))flatNumpyArray=numpy.array(randomByteArray) #将ByteArray转换成numpy.array#再转成400*300灰度图的array,因为flatNumpyArray图像有自己的高宽,故用reshape重定义写入图片的高宽grayImage=flatNumpyArray.reshape(300,400)cv2.imwrite('RandomGray.png',grayImage)#再转成400*100 RGB图象,RGB 3D的,故要加上颜色通道参数bgrImage=flatNumpyArray.reshape(100,400,3)cv2.imwrite('RandomColor.png',bgrImage)
视频文件的读写:
import cv2#视频是由一帧帧的图像组成path="/Users/mac/Documents/beautiful-china.avi'"videoCapture=cv2.VideoCapture(path)#get是获取视频的相关属性。例如:视频的帧率,帧数frame,总帧数,尺寸,格式等fps=videoCapture.get(cv2.CAP_PROP_FPS)#获取视频一帧的宽,高。宽和高都是整数。size=(int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)), int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)))#以各种格式写入视频,VideoWriter_fourcc是指写入的格式videoWriter=cv2.VideoWriter('MyOutputVid.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)success,frame=videoCapture.read()while success: #循环直到没有帧则结束 videoWriter.writer(frame) #将读到的帧写入到MyOutputVid.avi中 success,frame=videoCapture.read() #继续读取下一帧#注:但get方法得到返回值是0
注:谁的帧率小就拖了另一个后腿,视频输出的帧率由小帧率所决定。
cv2.cv.CV_FOURCC(‘I’,’4’,’2’,’0’)=uncompressed YUV 文件比较大
CV_FOURCC(‘P’, ‘I’, ‘M’, ‘1’) = MPEG-1 codec
CV_FOURCC(‘M’, ‘J’, ‘P’, ‘G’) = motion-jpeg codec
CV_FOURCC(‘M’, ‘P’, ‘4’, ‘2’) = MPEG-4.2 codec
CV_FOURCC(‘D’, ‘I’, ‘V’, ‘3’) = MPEG-4.3 codec
CV_FOURCC(‘D’, ‘I’, ‘V’, ‘X’) = MPEG-4 codec
CV_FOURCC(‘U’, ‘2’, ‘6’, ‘3’) = H263 codec
CV_FOURCC(‘I’, ‘2’, ‘6’, ‘3’) = H263I codec
CV_FOURCC(‘F’, ‘L’, ‘V’, ‘1’) = Flash video codec
经过试验,选取MPEG-4录像10秒,大小为963kb;选用H263,录像11秒钟,大小为1.25M(仅仅是验证性试验)。
camera 抓取
例:Let’s consider an example that captures 10 seconds of video from a camera and writes it to an AVI
import cv2cameraCapture=cv2.VideoCapture(0) #抓取视频fps=30 #视频帧率#获取视频的宽,高size=(int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))#以VideoWriter_fourcc参数内的格式写入到文件中videoWriter=cv2.VideoWriter_fourcc('MyOutputVid.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)#读取视频sucess,frame=cameraCapture.read()#视频持续帧数numFramesRemaining=10*fps-1#sucess为视频读取到帧的Id,及播放持续的数据>0则写入文件,继续读出下一帧,帧数-1while sucess and numFramesRemaining>0: videoWriter.write(frame) sucess,frame=cameraCapture.read() numFramesRemaining-=1
注: get() method of a VideoCapture class does not return an accurate value for the camera’s frame rate; it always returns 0
camera frames 在窗口显示camera frames
OpenCV allows named windows to be created, redrawn, and destroyed using the namedWindow(), imshow(), and destroyWindow() functions.and mouse input via the setMouseCallback() function
例:将camera抓取的帧显示在MyWindow中
import cv2clicked=False#鼠标键设置,event事件,x,y坐标,param参数def onMouse(event,x,y,falgs,param): global clicked if event==cv2.EVENT_LBUTTONUP: #left button up clicked=True #已经点击#抓取视频cameraCapture=cv2.VideoCapture(0)#新开窗边,命名为MyWindowcv2.namedWindow('MyWindow')#操作鼠标事件cv2.setMouseCallback('MyWindow',onMouse)print 'showing camera feed,Click window or press any key to stop'#读取抓取的camerasuccess,frame=cameraCapture.read()#帧数id 及 未clicked 及 未按键while success and cv2.waitKey(1)==-1 and not clicked: cv2.imshow('MyWindow',frame) #将帧显示在MyWindow上 success,frame=cameraCapture.read() #读取下一帧cameracv2.destroyAllWindows('MyWindow') #关闭Window
注:下面是参数详解
waitKey()是毫秒的等待时间,它的参数有下面几种:
-1是指什么键都不按
or an ASCII keycode 例如27是ESC键,ord(‘a’) returns 97
callback’s event argument:
CV_EVENT_MOUSEMOVE: Mouse movement
CV_EVENT_LBUTTONDOWN: Left button down
CV_EVENT_RBUTTONDOWN: Right button down
CV_EVENT_LBUTTONDBLCLK: Left button double-click
mouse callback’s flags argument:
CV_EVENT_FLAG_LBUTTON: The left button pressed
CV_EVENT_FLAG_RBUTTON: The right button pressed
- opencv computer vison
- OpenCV鼠标控制窗口大小(使用1.0vison)
- 【Computer Vision】OPENCV内存泄漏
- OpenCV 2 Computer Vision Application Programming Cookbook
- Mastering OpenCV with Practical Computer Vision Projects
- Mastering OpenCV with Practical Computer Vision Projects
- <<python computer vision with opencv>> chapter 2
- 【Computer vision】OPENCV RGB与BGR互换
- Opencv(open source computer vision library)
- 《OpenCV Computer Vision with Python》pdf
- OpenCV新书<Mastering OpenCV with Practical Computer Vision Projects>
- OpenCV书籍:Mastering OpenCV with Practical Computer Vision Projects
- 【OpenCV】|OpenCV Computer Vision with Python 2-1
- computer
- computer
- computer
- computer
- computer
- 阿里云产品 ECS、RDS、CDN、OCS、OSS、ACE、SLB介绍
- 资料: 关于美国屠杀印第安人的“真相”
- JS学习
- 使用Jena-TDB存储RDF本体、知识图谱文件
- web使用openoffice实现在线预览office文档
- opencv computer vison
- Android源码解析之singleTask launchMode
- 小白使用react——解决this.props.history.push无法跳转的问题
- Docker容器的生命周期管理
- BAT批处理 获取当前系统日期前一天的日期
- Hibernate(八)---管理Session
- JQuery的选择器对控件ID含有特殊字符的解决方法-涨姿势了!
- CEF3的使用说明
- Windows系统下使用维基百科中文语料训练Word2Vec词向量