opencv图像处理之图片与视频问题

0810opencv之图片与视频问题

实例代码:

一、图像的读入

# 图片读入 显示 保存 以及通过matplotlib 显示

def showimg():

    # 第二个参数可以为 cv2.IMREAD_COLOR 彩色 cv2.IMREAD_GRAYSCALE  灰度模式
    # cv2.IMREAD_UNCHANGED  读入衣服图像,并且包括图像的alpha通道
	img = cv2.imread('D:\sublime\code\cvcode\photo\confu2.jpg',0)  # 读入灰度图像
	# 第二个参数默认值为cv2.WINDOW_AUTOSIZE
	cv2.namedWindow('littlejun',cv2.WINDOW_NORMAL)  # 新开一个窗口
	cv2.imshow('littlejun',img)
	#matplotlib 显示图片
	plt.imshow(img,cmap='gray',interpolation = 'bicubic')  
	# plt.xticks([]),plt.yticks([]) #去除坐标
	plt.axis('off')  #  同上
	plt.show()

	k = cv2.waitKey(0)
	if(k&0xff == 27):
		cv2.destroyAllWindows()
	elif(k&0xff == ord('s')):
		cv2.imwrite('D:\sublime\code\cvcode\photo\saveconfu.jpg',img)
		cv2.destroyAllWindows()

cv2. imread(imgpath,way)

#  第一个参数为图片路径

#  第二个为图片的读入方式有以下几种:

cv2.IMREAD_COLOR 彩色的 (默认参数)

cv2.IMREAD_GRAYSCALE 灰度模式  (一般用可用0代替)

cv2.IMREAD_UNCHANGED 读入图像,包括图像的alpah通道

二、图片的输出

cv2.imshow(windowname,img)

第一个参数为窗口名称,第二个为图片名称

一般推荐先创建一个窗口

用 cv2.namedWindow(name,p2)

P2 一般有:cv2.WINDOW_AUTOSIZE cv2.WINDOW_NORMAL(可以调窗口大小)

三、利用matplotlib 显示图片

它显示图片是RGB格式的,所以如果想输出彩色的,先转换。

From matplotlib import as plt

plt.imshow(img,cmp,interpolation= ‘bicubic’)  #先加载图片

去除坐标刻度

plt.xticks([]),plt.yticks([])  或者用plt.axis(‘off’)

最后要用plt.show()  才会在窗口显示

至于cv2.waitKey(num) 的作用

它是一个键盘绑定函数就是等待键盘的输入,num 如果是大于0的数,那么就在num ms内,按下一个键,那么就返回该键的ascaii码值,否则返回-10,如果num设定为0 ,那么就会无期限地等待键盘输入。它的另一个作用就是用来检查某个键是否已经被按下。

比如 cv2.waitKey(0)&0xff == ord(‘q’)  这个就是判断是否键入q的

四、 图片保存

cv2.imwrite(path,img)

参数1 就是保存路径,参数二就是图片

五、销毁窗口

cv2.destroyAllWindows()  #销毁所有的窗口

cv2.destroyWindow(winname) # 销毁特定窗口

视频的采集与播放

实例代码:

#  视频采集和保存 ,读取文件视频
def video():
	cv2.namedWindow('littlejun',cv2.WINDOW_NORMAL)
	cap = cv2.VideoCapture(0)  # 创建摄像头对象
	# ret = cap.set(3,1000)
	# ret = cap.set(4,800) # 设置高宽 为什么改变不了
	# 确定视频编码格式
	fourcc = cv2.VideoWriter_fourcc(*'XVID')
	video = cv2.VideoWriter('D:\sublime\code\cvcode\photo\ newvideo.avi',fourcc,20.0,(640,400))
	while(cap.isOpened()):
		ret,frame = cap.read()
		cv2.imshow('littlejun',frame)
		if(ret):
			video.write(frame)
		if(cv2.waitKey(1)&0xff == ord('q')):
			break
	width,height,frequency = cap.get(3),cap.get(4),cap.get(5) # 3 宽 4 高 5 帧频
	# print(width,height,frequency)
	cap.release()
	video.release()
	cv2.destroyAllWindows()

	# 从文件中播放视频
	cap = cv2.VideoCapture('D:\sublime\code\cvcode\photo\encourage.MP4')  # 读文件就是直接用文件路径初始话就好
	cv2.namedWindow('littlejun')
	while(cap.isOpened()):

		ret,frame = cap.read()
		cv2.imshow('littlejun',frame)
		if(cv2.waitKey(25)&0xff == ord('q')):   # 用waitKey() 来控制视频播放的帧频 一般25就比较好了
			break
	cap.release()
	cv2.destroyWindow('littlejun')

一、视频的捕获和播放

1、 首先要创建一个VideoCapture 对象,一切视频采集或者播放由它来实现

Cap = cv2.VideoCapture(0)  参数2为设备索引好,一般笔记本有内置摄像头,所以0 就是本机的,当然可以用1 等选择别的设备。

2、 通过cv2.isOpened() 来检查摄像头是否初始化成功

 视频其实也是图片播放的效果,所以我们获取到的是一张张的图片ret,frame = cap.read()

参数1为是帧返回是否正确,也可以用来判断视频文件是否已经到了结尾了。参2 是返回的图片

然后通过imshow(winname , frame) 就可一实时看到摄像头拍到的东西了

关于cap 有很多信息,比如帧的宽和高等

Cap.get(num)  num for 0 to 18

其中3 是宽, 4 是高 其他就不说了

同样可以通过 cap.set(id, value) 来设置对应的值

视频的播放,只需要把VideoCapture(path) 把参数改为视频路径就好

同时通过waitKey(25) 来控制视频的播放速度,一般25比较好。

二、 视频的保存

这个就麻烦了一点,需要先确定编码格式

fourcc = cv2.VideoWriter_fourcc(*’XVID’)

创建视频写对象

video = cv2.VideoWriter(‘name.avi’,fourcc,20.0,(width,height))

参3是帧频,参数是帧的宽和高

写帧

video.write(frame)

三、 释放视频捕获对象和写对象

cap.release()

 video.release()

猜你喜欢

转载自blog.csdn.net/weixin_42973678/article/details/84879953