1.图片
import cv2
#读入图像,第一个参数是图片的完整路径,第二个参数是以何种方式读取
'''
CV_LOAD_IMAGE_UNCHANGED = -1(含<-1的整数)—— 在每个通道中,每个像素的位深为8 bit,通道数(颜色)保持不变;
CV_LOAD_IMAGE_GRAYSCALE = 0 ——位深为8bit,通道数 = 1(灰度图);
CV_LOAD_IMAGE_COLOR = 1(含其余>1整数)——位深 = ?(不确定),通道数 = 3(BGR图);
CV_LOAD_IMAGE_ANYDEPTH = 2 —— 位深不变,通道数 = ?(在VS中测试为1,灰度图);
CV_LOAD_IMAGE_ANYCOLOR = 4 —— 位深 = ?, 通道数不变。
'''
img=cv2.imread('12.jpg',0)
#显示图片参数,第一个参数是窗口的名字,其次才是我们的图像
#cv2.imshow('image',img)
#cv2.imshow('1',img)
cv2.imshow('image',img)
#是一个键盘绑定函数,参数设定为等待时间,返回的参数是ASCII码值,参数为0则是长时间等待输入
#如果没有键盘输入,返回值为-1
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
# 可以轻易删除任何我们建立的窗口
cv2.destroyAllWindows()
# 删除特定的窗口名称,在括号内输入删除的名称
#cv2.destroyWindow('name')
elif k == ord('s'): # wait for 's' key to save and exit
# 使用函数cv2.imwrite()来保存一个图像。首先需要一个文件名,之后才是你要保存的图像
cv2.imwrite('messigray1.png',img)
cv2.destroyAllWindows()
运行效果图:
2.视频
(1)用摄像头捕获视频
#用摄像头捕获视频
import cv2
'''
创建VideoCapture对象,它的参数可以是设备的索引号,或者一个文件。
设备索引号就是在指定要使用的摄像头。
一般的笔记本电脑都有内置摄像头。所以参数就是 0。
你可以通过设置成 1 或者其他的来选择别的摄像头。
'''
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
'''
ret, frame = cap.read() cap = cv2.VideoCapture(0)
返回值含义:
参数ret 为True 或者False,代表有没有读取到图片
第二个参数frame表示截取到一帧的图片
其他情况说明:
有时 cap 可能不能成功的初始化摄像头设备。这种情况下上面的代码会报
错。你可以使用 cap.isOpened(),来检查是否成功初始化了。如果返回值是
True,那就没有问题。否则就要使用函数 cap.open()。
其中的一些值可以使用 cap.set(propId,value) 来修改,value 就是你想要设置成的新值。
例如,我可以使用 cap.get(3) 和 cap.get(4) 来查看每一帧的宽和高。默认情况下得到的值是 640X480。但是我可以使用 ret=cap.set(3,320)和 ret=cap.set(4,240) 来把宽和高改成 320X240。
'''
ret, frame = cap.read()
# Our operations on the frame come here
'''
cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。
cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
'''
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# Display the resulting frame
# 显示图片参数,第一个参数是窗口的名字,其次才是我们的图像
# cv2.imshow('image',img)
# cv2.imshow('1',img)
cv2.imshow('frame',gray)
#等候1ms,播放下一帧,或者按q键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
#用来停止捕获视频
cap.release()
#关闭相应的显示窗口的
cv2.destroyAllWindows()
运行结果:
(2)从文件中播放和保存视频
import cv2
'''
注意:
与从摄像头中捕获一样,你只需要把设备索引号改成视频文件的名字。在
播放每一帧时,使用 cv2.waitKey() 设置适当的持续时间。如果设置的太低视
频就会播放的非常快,如果设置的太高就会播放的很慢(你可以使用这种方法
控制视频的播放速度)。通常情况下 25 毫秒就可以了。
cv2.VideoCapture(0) cap = cv2.VideoCapture('video.avi')
创建VideoCapture对象,它的参数可以是设备的索引号,或者一个文件。
设备索引号就是在指定要使用的摄像头。
一般的笔记本电脑都有内置摄像头。所以参数就是 0。
你可以通过设置成 1 或者其他的来选择别的摄像头。
'''
cap = cv2.VideoCapture(0)
# Define the codec and create VideoWriter object
#VideoWriter_fourcc为视频编解码器
'''
cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('X','2','6','4')
MPEG-4编码 .mp4 可指定结果视频的大小
cv2.VideoWriter_fourcc('I', '4', '2', '0')
该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件
cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')
该参数是MPEG-1编码类型,文件名后缀为.avi
cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小
cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')
该参数是Ogg Vorbis,文件名后缀为.ogv
cv2.VideoWriter_fourcc('F', 'L', 'V', '1')
该参数是Flash视频,文件名后缀为.flv
'''
fourcc = cv2.VideoWriter_fourcc(*'XVID')
'''
VideoWriter(filename, fourcc, fps, frameSize[, isColor]) -> <VideoWriter object>
第一个参数是要保存的文件的路径
fourcc 指定编码器
fps 要保存的视频的帧率
frameSize 要保存的文件的画面尺寸
isColor 指示是黑白画面还是彩色的画面
'''
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
# cap.isOpened(),来检查是否成功初始化了
while(cap.isOpened()):
'''
ret, frame = cap.read() cap = cv2.VideoCapture(0)
返回值含义:
参数ret 为True 或者False,代表有没有读取到图片
第二个参数frame表示截取到一帧的图片
'''
ret, frame = cap.read()
if ret==True:
'''
flip是opencv的一个图片翻转函数
cv2.flip(src, flipCode[, dst]) # src为要操作的图像
flipCode Anno
1 水平翻转
0 垂直翻转
-1 水平垂直翻转
'''
frame = cv2.flip(frame,0)
#写入帧
out.write(frame)
# 显示图片参数,第一个参数是窗口的名字,其次才是我们的图像
# cv2.imshow('image',img)
# cv2.imshow('1',img)
cv2.imshow('frame',frame)
# 等候1ms,播放下一帧,或者按q键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
#用来停止捕获视频
cap.release()
out.release()
#关闭相应的显示窗口的
cv2.destroyAllWindows()
运行截图
版权声明:本文为博主DBINGSEC原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/qq_56607768/article/details/123227955