python+openCV+pyqt5实现播放器

给之前python+openCV实现播放器增加一个页面实现,我选择了pyqt来做一个简单的页面。

  • 先看下UI界面,pyqt的环境配置可以参考:

python+openCV+pyqt5实现播放器_第1张图片

  • 播放器的基本功能:

  1. 选择视频文件

  2. 播放控制:(除了视频播放需要重写,其他功能都只需要调用之前写好的函数即可,已经现的功能)

    • 播放,使用 pyqt 的QLabel 控件展示一帧一帧的图片。
    • 暂停,将暂停方法和暂停按钮关联。
    • 重播,将视频资源 释放VideoCapture.release() 后重新加载。
    • 截图,关联截图功能。
    • 通过进度条控制播放进度 (暂未实现)
    • 声音调节(暂未实现)
  3. 代码实现:

    1. 实现label展示一张图片
      播放按钮和播放方法关联
      # 将播放按钮和播放函数关联。
      self.PlayBtn.clicked.connect(self.play)
      
      展示图片方法
      def play(self):
      	video_path = 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm'
      	vplayer = Cv2Player(video_path)
      	open_status = vplayer.capture.isOpened()
      	vplayer.ret, image = vplayer.capture.read()
      	if vplayer.ret is True:
      	   vplayer.image = image
      	   # 将openCV获取的帧图片格式进行转换,openCV读取帧图片的格式是BGR
      	   QtImgBuf = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
      	   # 把转换格式后的帧图片,实例化QImage对象
      	   QtImg = QtGui.QImage(QtImgBuf.data, QtImgBuf.shape[1], QtImgBuf.shape[0], QtGui.QImage.Format_RGB32)
      	   # VideoPlayer是UI界面中的label对象。先用QtImg实例和QPixmap对象,然后将其传给label
      	   self.VideoPlayer.setPixmap(QPixmap.fromImage(QtImg))
      	   # 使用QLabel的setScaledContents方法,是图片自适应QLabel的大小
      	   self.VideoPlayer.setScaledContents(True)
      
    2. 重写播放发放,实现播放功能
      # 获取当前视频状态
      def play(self):
      	video_path = 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm'
      	vplayer = Cv2Player(video_path)
      	open_status = vplayer.capture.isOpened()
      	while open_status:
      	    vplayer.ret, image = vplayer.capture.read()
      	    if vplayer.ret is True:
      	        vplayer.image = image
      	
      	       	# 将openCV获取的帧图片格式进行转换,openCV读取帧图片的格式是BGR
      		   	QtImgBuf = cv2.cvtColor(image, cv2.COLOR_BGR2BGRA)
      			 # 把转换格式后的帧图片,实例化QImage对象
      		  	QtImg = QtGui.QImage(QtImgBuf.data, QtImgBuf.shape[1], QtImgBuf.shape[0], QtGui.QImage.Format_RGB32)
      			  # VideoPlayer是UI界面中的label对象。先用QtImg实例和QPixmap对象,然后将其传给label
      		  	self.VideoPlayer.setPixmap(QPixmap.fromImage(QtImg))
      			  # 使用QLabel的setScaledContents方法,是图片自适应QLabel的大小
      		  	self.VideoPlayer.setScaledContents(True)
      			     
      	  		vplayer._exit_timing = 0
      	    elif vplayer.exit_timing():
      	        # 如果倒计时为真,播放结束
      	        break
      			# 跟进帧率控制播放每帧图片显示的间隔
      	    cv2.waitKey(int(1000 / int(vplayer.fps)))
      	# 停止视频播放
      	vplayer.stop()
      

你可能感兴趣的:(opencv,opencv,python,qt)