下载opencv
https://github.com/opencv/opencv
点击master,切换到你需要的opencv的tag版本,比如4.4
如果没有cmake,记得安装,如果没有apt或者yum之类的可以安装,那就要源码安装了,记得下载tar.gz之类的源码来编译,不要zip压缩包,zip里面的文件经常含/r/n之类的,就是一般是windows的格式,编译容易报错
下面开始正题:
cmake编译选项
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
如果是交叉编译,或者在一些国产机子上,如鲲鹏/飞腾+麒麟系统上,可能还要加上WITH_WEBP配置,否者可能报libweb*之类的错
-D WITH_WEBP=OFF
如果编译或之后运行有报gtk之类的错,要安装gtk,也会提示就是
sudo apt-get intsall libgtk2.0-dev
配置完之后,就是麻木的二连了
make
sudo make install
编译完之后,来试试opencv吧,
- 打开图片
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat img=cv::imread("1.jpg",cv::IMREAD_GRAYSCALE);
if(!img.empty()){
cv::imshow("1.jpg",img);
cv::waitKey(0);
}
return 0;
}
~
cv::IMREAD_GRAYSCALE表示打开为灰度图,可以去掉,加上感受下opencv处理图片的方便
按照我们编译时参数指定的路径,编译参数如下,要按cpp保存,c++11编译
g++ -g test.cpp -I /usr/local/include/opencv4/ -std=c++11 -L /usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgcodecs
2.打开摄像头
摄像头的代码就不贴了,可以直接用例子源码(videocapture_basic.cpp)
的来测试
路径:
cd samples/cpp/
代码如下
/**
@file videocapture_basic.cpp
@brief A very basic sample for using VideoCapture and VideoWriter
@author PkLab.net
@date Aug 24, 2016
*/
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
int main(int, char**)
{
Mat frame;
//--- INITIALIZE VIDEOCAPTURE
VideoCapture cap;
// open the default camera using default API
// cap.open(0);
// OR advance usage: select any API backend
int deviceID = 0; // 0 = open default camera
int apiID = cv::CAP_ANY; // 0 = autodetect default API
// open selected camera using selected API
cap.open(deviceID, apiID);
// check if we succeeded
if (!cap.isOpened()) {
cerr << "ERROR! Unable to open camera\n";
return -1;
}
//--- GRAB AND WRITE LOOP
cout << "Start grabbing" << endl
<< "Press any key to terminate" << endl;
for (;;)
{
// wait for a new frame from camera and store it into 'frame'
cap.read(frame);
// check if we succeeded
if (frame.empty()) {
cerr << "ERROR! blank frame grabbed\n";
break;
}
// show live and wait for a key with timeout long enough to show images
imshow("Live", frame);
if (waitKey(5) >= 0)
break;
}
// the camera will be deinitialized automatically in VideoCapture destructor
return 0;
}
编译
g++ -g videocapture_basic.cpp -I /usr/local/include/opencv4/ -std=c++11 -L /usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_videoio