准备工作:opencv的安装
参考ubuntu 18.04 安装 opencv
进展:
参考:OpenCV–VideoCapture类
OpenCV之IplImage详解
Mat函数
1.笔记本摄像头调用
test.cpp
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char **argv)//argv是一个指针变量,argv的指向(*argv)是char *,也就是argv指向的也是一个指针 ;*argv的指向(**argv)是char。
{
VideoCapture capture(0);//打开摄像头捕捉视频,默认0
namedWindow("myCamera",CV_WINDOW_AUTOSIZE);
while(true)
{
Mat frame;//创建图像
capture>>frame;//捕捉每一帧
imshow("myCamera",frame);
waitKey(30);//延时
}
return 0;
}
生成可执行程序
g++ `pkg-config opencv --cflags` test.cpp -o test `pkg-config opencv --libs`
运行test
./test
运行结果
python 调用摄像头
import cv2
import os
import shutil
def useCamera():
capture = cv2.VideoCapture(0)
capture.set(3, 480)
while capture.isOpened():
flag, image = capture.read()
cv2.imshow("image", image)
k = cv2.waitKey(1)
if k == ord('s'):
cv2.imwrite("test.jpg", image)
elif k == ord("q"):
break
capture.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
useCamera()
因为安装了anaconda,还没有在此环境下配置opencv,切换到root用户下运行.
sudo su
python 1.py
运行结果
2.视频存储
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main( int argc, char** argv )
{
//声明IplImage指针
IplImage* pFrame = NULL;
IplImage* img;
//获取摄像头
CvCapture* pCapture = cvCreateCameraCapture(0);
//创建窗口
cvNamedWindow("video", 1);
CvVideoWriter *writer = NULL;
int isColor = 1;
int fps = 25; // 或者 30
int frameW = 640; //
int frameH = 480;
writer=cvCreateVideoWriter("视频.avi",CV_FOURCC('X','V','I','D'),fps,cvSize(frameW,frameH),isColor);
//显示视屏
while(1)
{
pFrame=cvQueryFrame( pCapture );
if(!pFrame)break;
cvShowImage("video",pFrame);
cvGrabFrame(pCapture); // 捕捉帧
img = cvRetrieveFrame(pCapture); //检索捕捉的帧
cvWriteFrame(writer,img); //将帧添加到文件中
char c=cvWaitKey(33);
if(c==27)break;//按esc退出
}
cvReleaseImage(&pFrame);
cvReleaseImage(&img);
cvReleaseVideoWriter(&writer);
cvReleaseCapture(&pCapture);
cvDestroyWindow("video");
}
运行命令
g++ `pkg-config opencv --cflags` 1.cpp -o 1 `pkg-config opencv --libs`
./1
运行结果
在自设的first文件夹下生成了.avi的视频文件
出现问题 :
- cv2 报错
解决方法参考ImportError: No module named cv2