Ubuntu系统下安装opencv3.x并打开图片和视频文件以及打开摄像头录制视频
目錄
- 一、安裝opencv
- 1、前置安裝條件
- 2.安裝環(huán)境
- 3.下載opencv3.4.11
- 4.解壓安裝包
- 5.開始安裝
- 6.檢查是否安裝成功
- 二、顯示圖片和播放視頻
- 1、顯示圖片
- 2、播放視頻
- 三、打開攝像頭并顯示圖像
- 1. 虛擬機(jī)獲取攝像頭權(quán)限
- 四、問題回答
- 1. 問題一
- 問題二
- 五、總結(jié)
- 參考資料
一、安裝opencv
1、前置安裝條件
開始安裝opencv前,必須安裝,否則后續(xù)安裝出錯(cuò)
sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev2.安裝環(huán)境
VMware虛擬機(jī)安裝的ubuntu系統(tǒng)22.04
opencv版本:3.4.11
3.下載opencv3.4.11
https://opencv.org/releases/
opencv官方下載地址
使用Ubuntu系統(tǒng)中的瀏覽器打開,找到其中的3.4.11版本
4.解壓安裝包
下載的安裝包一般在虛擬機(jī)的下載文件中,將其復(fù)制到主目錄中來(home),解壓。
unzip opencv-3.4.11.zip或者直接雙擊安裝包,提取文件解壓。
解壓后,可以重命名,方便后續(xù)操作。
5.開始安裝
在終端進(jìn)入之前解壓的文件夾開始以下操作:
創(chuàng)建build文件夾:
進(jìn)入build文件夾:
cd build然后依次輸入以下代碼:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. //等待代碼運(yùn)行.... sudo make //此步耗時(shí)長,四十分鐘左右 sudo make install sudo sh -c "echo '/usr/local/lib' >> /etc/ld.so.conf.d/opencv.conf" sudo ldconfig6.檢查是否安裝成功
pkg-config --modversion opencv出現(xiàn)
3.4.11
便是安裝上了opencv3.4.11
二、顯示圖片和播放視頻
1、顯示圖片
創(chuàng)建一個(gè)test1.cpp文件
touch test.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("picture.png");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; }編譯:
g++ test1.cpp -o test1 pkg-config --cflags --libs opencv
在test1.cpp文件同一目錄下存放一張圖片,文件名為:picture.png
運(yùn)行:./test1
2、播放視頻
創(chuàng)建文件test2.cpp
#include <opencv2/opencv.hpp> using namespace cv; int main() {//讀取視頻VideoCapture capture("rainstorm.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; }編譯:
g++ test2.cpp -o test2 pkg-config --cflags --libs opencv
運(yùn)行:
./test2三、打開攝像頭并顯示圖像
1. 虛擬機(jī)獲取攝像頭權(quán)限
快捷鍵win+r,輸入services.msc ,回車
找到VMware USB Arbitation server,重新啟動(dòng)。
在VMware 中點(diǎn)擊 “ 虛擬機(jī) ” ,然后點(diǎn)擊 “ 設(shè)置(S)… ”。
選擇 “ USB控制器 ” ,將 “ USB兼容性 ” 設(shè)置為 “ USB 3.0 ” ,并點(diǎn)擊確定。
選擇 “ 虛擬機(jī) ” ,再選擇 “ 可移動(dòng)設(shè)備 ” ,再選擇 “IMC Networks USB2.0 VGA UVC WebCam ” ,最后點(diǎn)擊 “ 連接 ” ,再彈出的窗口內(nèi)點(diǎn)擊 “ 確定 ” 。
虛擬機(jī)右下角這個(gè)攝像頭圖標(biāo)有個(gè)小綠點(diǎn),則連接成功。
創(chuàng)建一個(gè)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 結(jié)束錄制視頻char flag = 0;//正在錄制標(biāo)志 0-不在錄制; 1-正在錄制while (1){cap >> frame;key = waitKey(100);if (key == 32)//按下空格開始錄制、暫停錄制 可以來回切換{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
四、問題回答
1. 問題一
編寫一個(gè)打開圖片進(jìn)行特效顯示的代碼 test1.cpp(見opencv編程參考資料 );
注意gcc編譯命令:
gcc test1.cpp -o test1 pkg-config --cflags --libs opencv
1)請解釋這條編譯命令,它是如何獲得opencv頭文件、鏈接lib庫文件的路徑的?
2)改用make+makefile方式編譯 上述程序(用變量命名格式寫makefile文件,并包括 clean選項(xiàng))
回答:1)gcc + 文件名 + -o + 輸出文件名 + 支持包
其中的``pkg-config 工具主要功能如下:
1.檢查庫的版本號(hào)。如果所需要的庫的版本不滿足要求,它會(huì)打印出錯(cuò)誤信息,避免鏈接錯(cuò)誤版本的庫文件。
2.獲得編譯預(yù)處理參數(shù),如宏定義,頭文件的位置。
3.獲得鏈接參數(shù),如庫及依賴的其它庫的位置,文件名及其它一些連接參數(shù)。
4.自動(dòng)加入所依賴的其它庫的設(shè)置
所以,這條命令是通過“pkg-config”來獲得opencv頭文件、鏈接lib庫文件的路徑的。
問題二
1)如果要求打開你硬盤上一個(gè)視頻文件來播放,請問示例代碼1第7行代碼如何修改?
2)在示例代碼1第9行的while循環(huán)中,Mat是一個(gè)什么數(shù)據(jù)結(jié)構(gòu)? 為什么一定要加一句waitKey延時(shí)代碼,刪除它行不行?
3)示例代碼1代碼會(huì)在while循環(huán)中一直運(yùn)行,你如果試圖用鼠標(biāo)關(guān)閉圖像顯示窗口,會(huì)發(fā)現(xiàn)始終關(guān)不掉。需要用鍵盤Ctrl+C 強(qiáng)制中斷程序,非常不友好。如何改進(jìn)?
回答:1)改為: VideoCapture capture(“硬盤中視頻的地址”)
2) while循環(huán)中的mat數(shù)據(jù)結(jié)構(gòu)其實(shí)是一個(gè)點(diǎn)陣,對應(yīng)圖像上的每一個(gè)點(diǎn),點(diǎn)的集合形成了一幀圖像;waitKey(30) ,中的參數(shù)單位是 ms 毫秒,也就是每一幀間隔 30 ms ,該語句時(shí)不能刪除的,否則會(huì)執(zhí)行錯(cuò)誤,無法播放視頻或錄制視頻。
3)在while循環(huán)語句中添加一個(gè)if語句,例如:if(key==27){ break;} ,按下exc退出程序。
五、總結(jié)
此次安裝opencv3.4.11,耗時(shí)極長,參考了許多的帖子最終才安裝成功。歸根結(jié)的是因?yàn)槊颗_(tái)虛擬機(jī)的運(yùn)行環(huán)境不同,有些需要在安裝opencv前的設(shè)置沒設(shè)置好。還好找到了一篇更加詳細(xì)的帖子,介紹到了安裝前置條件才安裝成功了。謝謝大佬!!
參考資料
1.https://blog.csdn.net/weixin_46129506/article/details/120646081
2.https://blog.csdn.net/zvui_/article/details/108219155?spm=1001.2101.3001.6650.12&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-108219155-blog-99044895.pc_relevant_multi_platform_whitelistv6&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-12-108219155-blog-99044895.pc_relevant_multi_platform_whitelistv6&utm_relevant_index=16
總結(jié)
以上是生活随笔為你收集整理的Ubuntu系统下安装opencv3.x并打开图片和视频文件以及打开摄像头录制视频的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点成分享 | 离心机的原理、分类、应用及
- 下一篇: 金山手机卫士正式版发布 永久免费