opencv下载 .
opencv_contrib下载.
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libgtk2.0-dev pkg-config #防止后面报错
##第三条命令在ubuntu20.04下安装错误
sudo apt-get install cmake
sudo apt-get install cmake-qt-gui
sudo cmake-gui
创建一个build文件作为存放编译后的文件,这里我们在opencv3.4.1文件夹内创建build.然后手动编译
注意事项:
OPENCV_EXTRA_MODULES_PATH:选择自己的opencv_contrib中的module
勾选BULID_opencv_world
CMAKE_BULID_TYPE :填写RELEASE
先开始configure,然后修改了,再configure一次,最后再generate,就完成了build文件,在整个build过程中,可能会存在缺失文件。
cd opencv3.4.1/build
sudo make
sudo make install
sudo vim /etc/ld.so.conf.d/opencv.conf
添加: /usr/local/lib
sudo ldconfig #使其保存生效
sudo vim /etc/bash.bashrc
在文件末尾添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,刷新一次bashrc
source /etc/bash.bashrc
进入opencv/samples/cpp/example_cmake目录下
cmake .
make
./opencv_example
运行结果:Hello OpenCV
1、ubuntu 常见问题系列:E:Could not get lock /var/lib/dpkg/lock-frontend - open
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavialable)
E: Unable to acquire the dpkg fronted lock (/var/lib/dpkg/lock-frontend), is another process using it?
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
2、OpenCV(3.4.1) Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file /opt/conda/conda-bld/opencv-suite_1530789967746/work/modules/highgui/src/window.cpp, line 636
Traceback (most recent call last):
File “drawing.py”, line 9, in
cv2.imshow(“Canvas”, canvas)
cv2.error: OpenCV(3.4.1) /opt/conda/conda-bld/opencv-suite_1530789967746/work/modules/highgui/src/window.cpp:636: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvShowImage
解决办法:卸载opencv,然后安装一个两个包,再重新编译
sudo apt-get install libgtk2.0-dev pkg-config
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
void draw_rectangle(int event, int x, int y, int flags, void*);
Mat firstFrame;
Point previousPoint, currentPoint;
Rect2d bbox;
int main(int argc, char *argv[])
{
cout << 123 << endl;
//启用摄像头进行跟踪
VideoCapture capture(0);
Mat frame;
capture >> frame;
//使用事先录好的视频进行检验
//VideoCapture capture;
//frame = capture.open("E:\\imagelib\\1.avi");
if (!capture.isOpened())
{
printf("can not open ...\n");
return -1;
} //获取视频的第一帧,并框选目标
capture.read(firstFrame);
if (!firstFrame.empty())
{
namedWindow("output", WINDOW_AUTOSIZE);
imshow("output", firstFrame);
setMouseCallback("output", draw_rectangle, 0);
waitKey();
}
//使用不同跟踪算法进行跟踪
//Ptr tracker= TrackerMIL::create();
// Ptr tracker= TrackerTLD::create();
Ptr tracker = TrackerKCF::create();
//Ptr tracker = TrackerMedianFlow::create();
//Ptr tracker= TrackerBoosting::create();
capture.read(frame);
tracker->init(frame, bbox);
namedWindow("output", WINDOW_AUTOSIZE);
while (capture.read(frame))
{
tracker->update(frame, bbox);
rectangle(frame, bbox, Scalar(255, 0, 0), 2, 1);
imshow("output", frame);
if (waitKey(20) == 'q') return 0;
}
capture.release();
destroyWindow("output"); return 0;
} //框选目标
void draw_rectangle(int event, int x, int y, int flags, void*)
{
if (event == EVENT_LBUTTONDOWN) { previousPoint = Point(x, y); }
else if (event == EVENT_MOUSEMOVE && (flags&EVENT_FLAG_LBUTTON))
{
Mat tmp; firstFrame.copyTo(tmp);
currentPoint = Point(x, y);
rectangle(tmp, previousPoint, currentPoint, Scalar(0, 255, 0, 0), 1, 8, 0);
imshow("output", tmp);
}
else if (event == EVENT_LBUTTONUP)
{
bbox.x = previousPoint.x;
bbox.y = previousPoint.y;
bbox.width = abs(previousPoint.x - currentPoint.x);
bbox.height = abs(previousPoint.y - currentPoint.y);
}
else if (event == EVENT_RBUTTONUP) {
destroyWindow("output");
}
}
编译命令
g++ test.cpp -o test `pkg-config --cflags --libs opencv`