今天看了场直播,偶然想到自己数据处理有文本、图像,但是大数据时代数据不止文本和图像,还有音频和视频。由于之前接触了OpenCV,我觉得视频是连续的图片组成的,还是比较好理解。 呃,说的很高大上。其实很简单,太难的东西咱们文科生也玩不了。就玩点简单的,拾人牙慧把。今天我就现学现用,写这篇文章。
直播大邓现在手头上没有视频,就用摄像头录来的视频玩玩。大家也没看到过活生生的大邓的光辉形象,今天就让大家一睹为快,😆。 一、实战加讲解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() ![](http://image109.360doc.com/DownloadImg/2021/02/2314/216153920_1_20210223023122146_wm)
二、对视频进行其他操作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() ![](http://image109.360doc.com/DownloadImg/2021/02/2314/216153920_2_20210223023122662_wm)
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() ![](http://image109.360doc.com/DownloadImg/2021/02/2314/216153920_3_20210223023123193_wm)
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() ![](http://image109.360doc.com/DownloadImg/2021/02/2314/216153920_4_20210223023123646_wm)
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() ![](http://image109.360doc.com/DownloadImg/2021/02/2314/216153920_5_20210223023124210_wm)
更多联想人脸识别。比如之前写的人脸识别,其实也可以做到的,大家感兴趣的可以自己动手试一试,怎么样实现摄像头捕捉人脸,并显示出来。 平铺视频 图像旋转 加特效,比如现在流行的
![](http://image109.360doc.com/DownloadImg/2021/02/2314/216153920_6_20210223023124896_wm)
觉得赞就给个赞
|