作者:小郭学数据
源自:快学python
学习视频可参见python+opencv3.3视频教学 基础入门
今天写的是图像,视频的加载与保存
数字图像由二维元素组成,每一个元素具有一个特定位置(x,y)和幅值f(x,y),这些元素就称为像素
def get_image_info(image):
print("图像类型:",type(image))
print("图像长x宽x通道数:",image.shape)
print("图像长宽通道数相乘所得值:",image.size)
print("图像像素值类型:",image.dtype)
pixel_data = np.array(image) # 将图片转换成数组
print("像素大小:", pixel_data)
结果输出
图像类型: <class 'numpy.ndarray'>
图像长x宽x通道数: (512, 512, 3)
图像长宽通道数相乘所得值:786432
图像像素值类型:uint8
像素大小: [[[128 138 225]
[127 137 224]
[126 136 223]
...
[ 81 68 178]
[ 83 71 183]
[ 84 74 188]]]
def save_image(image):
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) # 将image图片转换成灰度图
cv.imwrite("huidu.png",gray) #将转换后的图片保存为huidu.png
cv.imshow("gray",gray)
原图与灰度图对比:
# 获取视频
def video_demo():
capture = cv.VideoCapture(0) #0指笔记本的内置摄像头,可以设置成1或其他的来选择成别的摄像头
print("类型",type(capture))
while True:
ret, frame = capture.read() # 获取相机图像,返回ret(结果为True/False),和每一帧图片
frame = cv.flip(frame, 1) # 将图片水平翻转,竖直翻转为0
print('1', ret) # 打印出ret值
cv.imshow("video", frame) # 将每一帧图片放入video窗口
c = cv.waitKey(50) # 等有键输入(这里指c=Esc键)或者50ms后自动将窗口消除
if c == 27: #如果按esc退出的话,这里必须是等于27,27是esc的ASCLL十进制表示
break
def save_video():
cap = cv.VideoCapture(0)
#FourCC是用于指定视频编解码器的4字节代码
#在Fedora中:DIVX,XVID,MJPG,X264,WMV1,WMV2。(最好使用XVID。MJPG会生成大尺寸的视频。X264会生成非常小的尺寸的视频)
#在Windows中:DIVX(尚待测试和添加)
#在OSX中:MJPG(.mp4),DIVX(.avi),X264(.mkv)。
fourcc = cv.VideoWriter_fourcc('D', 'I','V', 'X')
# 参数说明:输出视频名称,编码格式,播放频率,帧的大小
out = cv.VideoWriter("../images/xiaoguo.avi", fourcc, 50.0, (640, 480))
while cap.isOpened(): # 你可以使用 cap.isOpened(),来检查是否成功初始化了
ret, frame = cap.read()
if ret is True:
out.write(frame)
cv.imshow('frame', frame)
if cv.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
OpenCv中读取的视频是没有声音的
以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。