查看原文
其他

【视频教程】对视频进行基本操作

2017-09-05 大邓 大邓带你玩python

今天看了场直播,偶然想到自己数据处理有文本、图像,但是大数据时代数据不止文本和图像,还有音频和视频。由于之前接触了OpenCV,我觉得视频是连续的图片组成的,还是比较好理解。

呃,说的很高大上。其实很简单,太难的东西咱们文科生也玩不了。就玩点简单的,拾人牙慧把。今天我就现学现用,写这篇文章。

https://v.qq.com/txp/iframe/player.html?vid=a0546pgp20v&width=500&height=375&auto=0

直播大邓

现在手头上没有视频,就用摄像头录来的视频玩玩。大家也没看到过活生生的大邓的光辉形象,今天就让大家一睹为快,😆。

一、实战加讲解

1.1捕捉摄像头

想用电脑上的摄像头捕捉自己,首先要用python脚本捕捉摄像头。

import cv2

#捕捉摄像头  参数0别去掉哦
cap = cv2.VideoCapture(0)

1.2摄像头对象进行读取

得到的cap,我们要读取数据,才能进行后续的操作。python cap.read() 问题来了,cap.read()返回的是什么呢?

没关系,不懂cap.read()返回啥,咱们就打印运行一下。

print(cap.read())

返回

(True, array([[[ 0,  0,  0],        [ 0,  0,  0],        [ 0,  0,  0],        ...,              ...,                ...,              ...,        [ 0,  0, 42],        [ 0,  0, 42],        [ 0,  0, 42]]], dtype=uint8))

从上面看,返回的是一个元组。 元组第一个元素是布尔值,第二个元素是矩阵。根据之前OpenCV知识(对此不懂的,请去观看大邓最近几期OpenCV公众号),矩阵应该就是图像矩阵。

那么有用的是矩阵数据。我们可以通过

ret,frame = cap.read()

将矩阵数据找到并赋值给frame

1.3视频显示

多幅图片连续播放就组成了动画,如果播放频率高一些,频率超过人类肉眼的阈值,就成了视频。

因为刚刚cap.read()是捕捉摄像头拍照。拍的仅仅是一张。为了连续,我们这里使用while循环,持续连续的拍照并展示。

在这里我们延时1ms,持续拍照并显示。

import cv2 cap = cv2.VideoCapture(0)

while True:    ret,frame = cap.read()          cv2.imshow('我的摄像', frame)        #延时1ms显示           键盘q按下    if cv2.waitKey(1)&0xFF==ord('q'):         #退出while循环,退出程序        break

#python释放摄像头
cap.release()

#关闭所有窗口
cv2.destroyAllWindows()


二、对视频进行其他操作

2.1视频灰度化

灰度化图像,在之前的文章中有公式法、平均法和cvtColor法。今天直接使用OpenCV封装的方法。

import cv2 cap = cv2.VideoCapture(0)

while True:    ret,frame = cap.read()    cvt_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)    cv2.imshow('我的摄像', cvt_frame)    # 延时1ms显示    if cv2.waitKey(10)&0xFF==ord('q'):        break

cap.release()
cv2.destroyAllWindows()


2.2视频日落化

日落效果,将图像矩阵的蓝色与绿色调整为原来的70%

import cv2 cap = cv2.VideoCapture(0)

while True:    ret,frame = cap.read()        #获取视频图像的高row_num和宽column_num    row_num = frame.shape[0]    column_num = frame.shape[1]        #对图像中所有的像素点的蓝色与绿色,亮度变为原来的70%    for row in range(row_num):        for column in range(column_num):            frame[row, column, 0] = frame[row, column, 0]* 0.7            frame[row, column, 1] = frame[row, column, 1] * 0.7    cv2.imshow('我的摄像', frame)    # 延时1ms显示    if cv2.waitKey(10)&0xFF==ord('q'):        break

cap.release()
cv2.destroyAllWindows()


2.3视频负片化

日落效果,将图像矩阵的Blue、green、red调整为255-blue、255-green、255-red

import cv2 cap = cv2.VideoCapture(0)

while True:    ret,frame = cap.read()        row_num = frame.shape[0]    column_num = frame.shape[1]        #负片,rgb变为   255-rgb    for row in range(row_num):        for column in range(column_num):            frame[row, column, 0] = 255-frame[row, column, 0]            frame[row, column, 1] = 255-frame[row, column, 1]            frame[row, column, 2] = 255-frame[row, column, 2]    cv2.imshow('我的摄像', frame)    # 延时1ms显示    if cv2.waitKey(10)&0xFF==ord('q'):        break

cap.release()
cv2.destroyAllWindows()


2.4视频加水印文字

import cv2 cap = cv2.VideoCapture(0)

while True:    ret,frame = cap.read()    # 文字在图中的坐标(注意:这里的坐标原点是图片左上角)    x, y = 400, 400    cv2.putText(img=frame, text='Handsome guy',                org=(x, y), fontFace=cv2.FONT_HERSHEY_TRIPLEX,                fontScale=1, color=(255, 255, 255))

   cv2.imshow('我的摄像', frame)    # 延时1ms显示    if cv2.waitKey(10)&0xFF==ord('q'):        break

cap.release()
cv2.destroyAllWindows()



更多联想

  1. 人脸识别。比如之前写的人脸识别,其实也可以做到的,大家感兴趣的可以自己动手试一试,怎么样实现摄像头捕捉人脸,并显示出来。

  2. 平铺视频

  3. 图像旋转

  4. 加特效,比如现在流行的 


觉得赞就给个赞


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存