|
目录
一.示例:图片
二.示例:视频
1.虚拟机获取摄像头权限
?2.打开摄像头录制视频
?三.总结
四.参考资料
一.示例:图片
创建test1.cpp文件?
gedit test1.cpp
复制代码
#include <opencv2/highgui.hpp> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main(int argc, char** argv) { ?? ?CvPoint center; ? ? double scale = -3;?
?? ?IplImage* image = cvLoadImage("lena.jpg"); ?? ?argc == 2? cvLoadImage(argv[1]) : 0; ?? ? ?? ?cvShowImage("Image", image); ?? ? ?? ? ?? ?if (!image) return -1; ?? ?center = cvPoint(image->width / 2, image->height / 2); ?? ?for (int i = 0;i<image->height;i++) ?? ??? ?for (int j = 0;j<image->width;j++) { ?? ??? ??? ?double dx = (double)(j - center.x) / center.x; ?? ??? ??? ?double dy = (double)(i - center.y) / center.y; ?? ??? ??? ?double weight = exp((dx*dx + dy*dy)*scale); ?? ??? ??? ?uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3); ?? ??? ??? ?ptr[0] = cvRound(ptr[0] * weight); ?? ??? ??? ?ptr[1] = cvRound(ptr[1] * weight); ?? ??? ??? ?ptr[2] = cvRound(ptr[2] * weight); ?? ??? ?}
?? ?Mat src;Mat dst; ?? ?src = cvarrToMat(image); ?? ?cv::imwrite("test.png", src);
? ? cvNamedWindow("test",1); ??? ?imshow("test", src); ?? ? cvWaitKey(); ?? ? return 0; }
编译文件:
c++文件编译命令:g++ test1.cpp -o test1 `pkg-config --cflags --libs opencv`

?
在同一文件夹下准备一张图片,文件名为:lena.jpg
执行命令 ./test1

?
?由lena.jpg生成了test.png
二.示例:视频
1.虚拟机获取摄像头权限
VirtualBox 需要安装?Oracle VM VirtualBox Extension Pack?才能使用摄像头。
进入 VirtualBox 官网下载页面:Downloads – Oracle VM VirtualBox
进入后下载和virtualbox同版本的扩展包
在 管理 -> 全局设定 -> 扩展 -> 新增下载好的 Oracle VM VirtualBox Extension Pack 并安装

?
?2.打开摄像头录制视频
创建一个test3.cpp文件
gedit test3.cpp
复制代码
/********************************************************************* 打开电脑摄像头,空格控制视频录制,ESC退出并保存视频RecordVideo.avi *********************************************************************/ #include<iostream> #include <opencv2/opencv.hpp> #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> using namespace cv; using namespace std;
int main() { ?? ?//打开电脑摄像头 ?? ?VideoCapture cap(0); ?? ?if (!cap.isOpened()) ?? ?{ ?? ??? ?cout << "error" << endl; ?? ??? ?waitKey(0); ?? ??? ?return 0; ?? ?}
?? ?//获得cap的分辨率 ?? ?int w = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_WIDTH)); ?? ?int h = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_HEIGHT)); ?? ?Size videoSize(w, h); ?? ?VideoWriter writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, videoSize); ?? ? ?? ?Mat frame; ?? ?int key;//记录键盘按键 ?? ?char startOrStop = 1;//0 ?开始录制视频; 1 结束录制视频 ?? ?char flag = 0;//正在录制标志 0-不在录制; 1-正在录制
?? ?while (1) ?? ?{ ?? ??? ?cap >> frame; ?? ??? ?key = waitKey(100); ?? ??? ?if (key == 32)//按下空格开始录制、暂停录制 ? 可以来回切换 ?? ??? ?{ ?? ??? ??? ?startOrStop = 1 - startOrStop; ?? ??? ??? ?if (startOrStop == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘 ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?}
?? ??? ?if (startOrStop == 0 && flag==1) ?? ??? ?{ ?? ??? ??? ?writer << frame; ?? ??? ??? ?cout << "recording" << endl; ?? ??? ?} ?? ??? ?else if (startOrStop == 1) ?? ??? ?{ ?? ??? ??? ?flag = 0; ?? ??? ??? ?cout << "end recording" << endl; ?? ??? ??? ? ?? ??? ?} ?? ??? ?imshow("picture", frame); ?? ?} ?? ?cap.release(); ?? ?writer.release(); ?? ?destroyAllWindows(); ?? ?return 0; } 编译 test3.cpp 文件。 g++ test3.cpp -o test3 `pkg-config --cflags --libs opencv`
输出: ./test3
空格键开始录制

Esc停止录制

?三.总结
在Ubuntu安装opencv步骤很多,中间出了很多问题。通过在网上参考解决了一些问题。这两个示例也让我感到了opencv的乐趣。
四.参考资料
Ubuntu18.04下OpenCV3.4.11的安装及使用示例_可乐有点好喝的博客-CSDN博客
Ubuntu18.04使用opencv库编写打开摄像头压缩视频_WOOZI9600L2的博客-CSDN博客
|