1:交互式cv应用程序的输入输出可能是图像文件、视频文件和原始字节等,opencv的imread()和imwrite()函数支持各种静态图像文件。
1.1 像素都是一个数值,但不同格式表示像素的方式不同,下面介绍三种表示像素的方法
①:创建一个黑色的正方形图像:img=np.zeros((3,3),dtype=numpy.unit8)
②:每个像素由8位整数来表示,即每个像素的取值范围是0~255
③:img=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR),这样就将①中的单通道一元组表示成了每个像素是三通道三元组形式
1.2读取任意一种格式的图像并将其保存为另一种格式
import cv2
img=cv2.imread('图像文件的绝对路径.mypic.png')
cv2.imwrite('mypic.jpt',image)
grayImage=cv2.imread('mypic.png',cv2.IMREAD_GRAYSCALE)
cv2.imwrite('mypicGray.png',grayImage) (讲mypic.png转换为灰度图的方法)
1.3图像与原始字节之间的转换(因为上面我们已经说过像素由好多种表示方法,每个像素可以用8位数表示,表示0到255之间的整数,所以一个像素可以用一个字节表示)
①:灰度图像或者BGR图像转化为随机字节数组
byteArray = bytearray(image) (这里利用bytearray将图片转换为自己)
②:随机字节数组转换为灰度图像或者BGR图像
import cv2
import numpy
import os
randomByteArray=bytearray(os.urandom(120000)) (os.urandom()函数可以随机生成原始字节)
flatNumpyArray=numpy.array(randomByteArray) (把字节转换为numpy数组)
grayImage=flatNumpyArray.reshape(300,400) (转换为300*400大小的灰度图像)
cv2.imwrite('randomGray.png',grayImage)
bgrImage=flatNumpyArray.reshape(100,400,3) (转换为三通道的300*400的bgr图像)
cv2.imwrite('RandomColor.png',bgrImage)
1.4视频文件的读/写
opencv提供了VideoCapture类和VideoWrite类来支持各种格式的视频文件,利用VideoCapture类通过read()函数来获得新的帧,每帧都是一副BGR格式的图像,同样可以将
一副BGR图像传递给VideoWrite()函数,VideoWrite函数利用write()函数将图像添加到指定文件中
import cv2
videoCapture=cv2.VideoCapture('MyAVI.avi')
fps=videoCapture.get(cv2.CAP_PROP_FPS)
size=(int(videoCapture.get(cv2.CAP_PROP_FPS_WIDTH)),
int(videoCapture.get(cv2.CAP_PROP_FPS_HEIGHT)))
......
帧速率和帧大小必须要指定,因为我们要从另一个视频文件复制视频帧,这些属性可以通过VideoCapture类的get()函数获得
1.5捕获摄像头的帧
为了针对摄像头创建合适的VideoWriter类,要对帧速率做出假设,要么使用计时器来测量,,VideoCapture类所使用的终端不支持所查询的这个属性,会返回0