python_OpenCV_按键截取图片——按键

最近在pycharm上读取视频遇到一些问题,总结如下:

1)OpenCV无法读取视频;

2)无法使用按键截取视频中的图像帧;

针对第一个问题:code如下

#!/usr/bin/env python
# -*- coding: utf_8 -*-
import cv2
import numpy as np

cap = cv2.VideoCapture("144022.h264")
# imh =cv2.imread('/home/fuxueping/Pictures/蒙古省西里尔文.png')
while(1):
    # get a frame
    ret, frame = cap.read()
    size = frame.shape
    h = size[0]
    w = size[1]
    sp = frame.shape
    # print sp
    # sz1 = sp[0]
    # sz2 = sp[1]
    sz3 = sp[2]
    print 'width: %d \nheight: %d \nnumber: %d' % (w, h, sz3)
    # show a frame
    cv2.imshow("capture", frame)
    if cv2.waitKey(100) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

第一个问题解决方法:在网上查阅之后知道视频播放是与ffmpeg有关系,需要重新编译OpenCV,本人使用的是OpenCV3,在编译OpenCV3之前,首先要编译FFmpeg,操作流程如下:

OpenCV文件夹是本人自己建立的,进入这个文件夹的路径下候进行库的编译

1.ffmpge

执行如下命令进行ffmpeg3.0的编译安装

cd ~/OpenCV
wget -c http://ffmpeg.org/releases/ffmpeg-3.0.tar.bz2 
tar xvf ffmpeg-3.0.tar.bz2 
cd ffmpeg-3.0 
sudo apt-get install yasm 
./configure --host-cppflags=-fPIC --host-cflags=-fPIC --enable-shared 
make 
sudo make install
2.OpenCV
执行如下命令进行OpenCV3.1.0的编译安装:

cd ~/OpenCV 
wget -c http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/3.1.0/opencv-3.1.0.zip 
unzip opencv-3.1.0.zip 
cd opencv-3.1.0 
cmake . 
make 
sudo make install
注意:在使用Cmake进行编译时,文中所说是“cmake .“,不要缺省了”.“。

在编译OpenCV时,自己在编译的时候与上面的命名行语句略有不同,使用了cmake GUI,不能使用CUDA,所以把with CUDA的勾选去掉了,这是别人要求的,具体原因不知道;

参考:http://jingyan.baidu.com/article/63acb44a3b326561fcc17e13.html

第二个问题描述:

本人想实现按”q“按键的时候退出视频播放,而按”s“按键的时候可以保存相应的视频帧,但是实际无响应,代码如下:

#coding=utf-8
import cv2
#设置视频捕获
cap=cv2.VideoCapture("144022.h264")
#循环
while True:
        ret,im=cap.read()
        #显示在窗口上
        cv2.imshow('video test', im)
        key=cv2.waitKey(10)
        print key
        if key == 'q':  #'q' waitfor 'q' keytoexit
            cv2.destroyAllWindows()
        elif key == 's': #key == 's':  # wait for 's' key to save and exit
            cv2.imwrite('messigray.png', im)

第二个问题的解决方法:

通过打印输出,在按键时,会输出按键输出值,将代码改变为如下:

#coding=utf-8
import cv2
#设置视频捕获
cap=cv2.VideoCapture("144022.h264")
#循环
while True:
        ret,im=cap.read()
        #显示在窗口上
        cv2.imshow('video test', im)
        key=cv2.waitKey(10)
        print key
        if key == 1048689:  #'q' waitfor 'q' keytoexit
            cv2.destroyAllWindows()
        elif key == 1048691: #key == 's':  # wait for 's' key to save and exit
            cv2.imwrite('messigray.png', im)