SynTime

知行合一 盖周天之

0%

macOS(Intel)配置opencv(C++)

前置条件:homebrew,Xcode

安装pkg-config

brew install pkg-config

安装opencv

brew install opencv

测试是否安装完成:pkg-config —cflags —libs opencv

此时您可能会出现下面的错误:
Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing `opencv.pc’ to the PKG_CONFIG_PATH environment variable
No package ‘opencv’ found

你先别急:原因是缺失了opencv.pc这个配置信息文件,故解决方法就是添加这个文件然后将其导入到环境变量中。

解决方案:先创建opencv.pc文件,这里要注意它的路径信息:

cd /usr/local/lib
sudo mkdir pkgconfig
cd pkgconfig
sudo touch opencv.pc

然后在opencv.pc中添加以下信息,注意这些信息需要与自己安装opencv时的库路径对应:

prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: opencv
Description: The opencv library
Version:4.8.0
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
~
保存退出,然后将文件导入到环境变量:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

之后执行pkg-config —cflags —libs opencv检验

由于是用C++并且笔者想在终端中直接使用,所以需要ln -s /usr/local/include/opencv4/opencv2 opencv2

默认情况下,通过brew安装的opencv目录于:/usr/local/Cellar/opencv

如果想在终端下使用,所以需要建立软连接

注意:”OpenCV 4.x+ requires enabled C++11 support”

下面给出测试 测试来自opencv官方例程的代码文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void drawText(Mat & image);

int main()
{
cout << "Built with OpenCV " << CV_VERSION << endl;
Mat image;
VideoCapture capture;
capture.open(0);
if(capture.isOpened())
{
cout << "Capture is opened" << endl;
for(;;)
{
capture >> image;
if(image.empty())
break;
drawText(image);
imshow("Sample", image);
if(waitKey(10) >= 0)
break;
}
}
else
{
cout << "No capture" << endl;
image = Mat::zeros(480, 640, CV_8UC1);
drawText(image);
imshow("Sample", image);
waitKey(0);
}
return 0;
}

void drawText(Mat & image)
{
putText(image, "Hello OpenCV",
Point(20, 50),
FONT_HERSHEY_COMPLEX, 1, // font face and scale
Scalar(255, 255, 255), // white
1, LINE_AA); // line thickness and type
}

g++ example.cpp -o example.o -c -Wall -I/usr/local/include/opencv4 -std=c++11

g++ example.o -o opencv_example -L/usr/local/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core