Ubuntu系统下OpenCV使用实例(虚拟机获取摄像头权限)
文章目錄
- 一、OpenCV圖片特效實(shí)例(實(shí)現(xiàn)原圖中心放大兩倍)
- 二、OpenCV視頻使用實(shí)例
- 1、虛擬機(jī)獲取攝像頭權(quán)限
- 2、播放視頻
- 3、錄制視頻
- Ubuntu下OpenCV初步學(xué)習(xí)至此結(jié)束!!
一、OpenCV圖片特效實(shí)例(實(shí)現(xiàn)原圖中心放大兩倍)
1、準(zhǔn)備工作:
首先創(chuàng)建文件存放自己的代碼
而后創(chuàng)建一個(gè).cpp文件編寫測(cè)試代碼
gedit test1.cpp將以下代碼復(fù)制到test1.cpp中:
#include <iostream> #include <math.h> #include <opencv2/opencv.hpp> #include<opencv2/highgui.hpp> #include <opencv2/highgui/highgui_c.h>using namespace cv; using namespace std;int main() {// 載入原圖Mat srcImage = imread("./Lucy.jpg");Mat dstImage1,dstImage2; // 臨時(shí)變量和目標(biāo)圖的定義Rect m_select;// 顯示原圖imshow("【原始圖】", srcImage);//進(jìn)行尺寸調(diào)整操作resize(srcImage, dstImage1, Size(srcImage.cols * 2, srcImage.rows * 2), (0, 0),(0, 0), 1);m_select = Rect(200,200,300,400);dstImage2 = dstImage1(m_select);imshow("【原圖中心放大】", dstImage2);waitKey(0);return 0; }2、編譯
執(zhí)行以下命令進(jìn)行編譯:
在同目錄下保存一張圖片命名為:Lucy.jpg
運(yùn)行test1
./tset1效果如下:
3、make+makefile方式編譯(記得先刪除可運(yùn)行的test1)
首先輸入以下命令
然后輸入以下代碼:
.PHONY: clean g=g++ t1=test1.cpp t2=test1.out lib=$(shell pkg-config opencv --cflags --libs opencv4) $(t2):$(t1)$(g) $(t1) $(lib) -o $@ clean:rm -f $(t2)二、OpenCV視頻使用實(shí)例
1、虛擬機(jī)獲取攝像頭權(quán)限
首先打開cmd(Win+R)輸入services.msc
找到如下項(xiàng)目并確定處于啟動(dòng)狀態(tài)
然后點(diǎn)擊VM虛擬機(jī)選擇設(shè)置一欄
選擇“USB控制器”,將“USB兼容性”設(shè)置為“USB3.0或以上”并點(diǎn)擊確定
再次點(diǎn)擊“虛擬機(jī)”,選擇“可移動(dòng)設(shè)備”,然后選擇“Chicony Integrated Camera(不同設(shè)備名稱可能不同,選擇XXX Camera即可)”,最后點(diǎn)擊連接。
點(diǎn)擊確定
此時(shí)觀察到虛擬機(jī)右下角攝像頭標(biāo)志有個(gè)綠點(diǎn)即證明連接成功。(同一個(gè)設(shè)備一次只能同時(shí)連接到主機(jī)或虛擬機(jī),此時(shí)攝像頭已與主機(jī)斷開)
2、播放視頻
創(chuàng)建一個(gè)test2.cpp文件,輸入以下代碼:
gedit test2.cpp #include <opencv2/opencv.hpp> using namespace cv; int main() {//從攝像頭讀取視頻VideoCapture capture("video.mp4");//循環(huán)顯示每一幀while(1){Mat frame;//定義一個(gè)Mat變量,用于存儲(chǔ)每一幀的圖像capture >> frame;//讀取當(dāng)前幀if(frame.empty())//播放完畢,退出break;imshow("讀取視頻幀",frame);//顯示當(dāng)前幀waitKey(30);//掩飾30ms}system("pause");return 0; }代碼講解:
- 如果語(yǔ)句:VideoCapture capture(0),后面的參數(shù)設(shè)置為 0,則從攝像頭讀取視頻并循環(huán)顯示每一幀;如果設(shè)置為一個(gè)視頻的文件名,比如:man.mp4 ,則會(huì)將視頻讀取并循環(huán)顯示每一幀。
- while 循環(huán)體中的 Mat 數(shù)據(jù)結(jié)構(gòu)其實(shí)是一個(gè)點(diǎn)陣,對(duì)應(yīng)圖像上的每一個(gè)點(diǎn),點(diǎn)的集合形成了一幀圖像,有關(guān) Mat 詳解請(qǐng)看:OpenCV中Mat數(shù)據(jù)結(jié)構(gòu)
- 語(yǔ)句:waitKey(30) ,中的參數(shù)單位是 ms 毫秒,也就是每一幀間隔 30 ms,該語(yǔ)句時(shí)不能刪除的,否則會(huì)執(zhí)行錯(cuò)誤,無(wú)法播放視頻或錄制視頻。
編譯
g++ test2.cpp -o test2 `pkg-config --cflags --libs opencv`運(yùn)行
./test2效果如下:
3、錄制視頻
gedit test3.cpp復(fù)制以下代碼:
/********************************************************************* 打開電腦攝像頭,空格控制視頻錄制,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::VideoWriter::fourcc('M', 'J', 'P', 'G'), 25, videoSize);Mat frame;int key;//記錄鍵盤按鍵char startOrStop = 1;//0 開始錄制視頻; 1 結(jié)束錄制視頻char flag = 0;//正在錄制標(biāo)志 0-不在錄制; 1-正在錄制while (1){cap >> frame;key = waitKey(100);if (key == 32)//按下空格開始錄制、暫停錄制 可以來(lái)回切換{startOrStop = 1 - startOrStop;if (startOrStop == 0){flag = 1;}}if (key == 27)//按下ESC退出整個(gè)程序,保存視頻文件到磁盤{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; }編譯:
g++ test3.cpp -o test3 `pkg-config --cflags --libs opencv`運(yùn)行:
./test3效果如下:
ESC停止錄制并保存(可以看到在目錄下生成了一個(gè).avi文件)
Ubuntu下OpenCV初步學(xué)習(xí)至此結(jié)束!!
總結(jié)
以上是生活随笔為你收集整理的Ubuntu系统下OpenCV使用实例(虚拟机获取摄像头权限)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ruoyi是怎么点击菜单跳转页面的_5分
- 下一篇: 关联分析——关联规则应用及案例