Mac使用homebrew安装OpenCV并运行Yolo-cpp-opencv笔记

编程入门 行业动态 更新时间:2024-10-28 16:30:31

Mac使用homebrew安装OpenCV并运行Yolo-cpp-opencv<a href=https://www.elefans.com/category/jswz/34/1770047.html style=笔记"/>

Mac使用homebrew安装OpenCV并运行Yolo-cpp-opencv笔记

1.安装homebrew

/usr/bin/ruby -e "$(curl -fsSL )"

2.安装OpenCV

brew install opencv

安装目录为 /usr/local/Cellar/opencv

使用OpenCV遇到的坑

#include<opencv2/opencv.hpp>

会报错:

1.fatal error: ‘opencv2/opencv.hpp’ file not found

进入/usr/local/include目录,发现并没有opencv2目录,opencv实际上的目录为/usr/local/include/opencv4/opencv2,因此可以在目录/usr/local/inlcude中创建一个软连接指向opencv2

ln -s /usr/local/include/opencv4/opencv2 opencv2
注:ln命令
  • ln(英文全拼:link files)命令:它的功能是为某一个文件在另外一个位置建立一个同步的链接。

2.error “OpenCV 4.x+ requires enabled C++11 support”

原本直接编译会报错:
gcc yolo_main.cpp -o yolo_main
需要添加参数 -std=c++11:
gcc -std=c++11 yolo_main.cpp -o yolo_main

3.error: use of undeclared identifier ‘strcpy_s’; did you mean ‘strcpy’? strcpy_s(this->netname, config.netname.c_str());

  • **strcpy()与strcpy_s()的区别:**后者是前者的安全版本。
  • strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。

4.Undefined symbols for architecture x86_64

  • 创建opencv.pc
# Package Information for pkg-config
prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/includeName: OpenCV
Description: Open Source Computer Vision Library
Version: 2.4.8
Libs: -L${libdir} ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab
Cflags: -I${includedir_old} -I${includedir_new}

《pkg-config 详解》参考链接:

5.linux下C 和 C++ include搜索的路径

C语言中#include <> 与 #include ""的区别
  • #include <>: 直接到系统指定目录查找头文件;
  • #include “”: 先到当前目录查找头文件,然后到系统指定目录查找头文件;
C++中#include <> 与 #include ""的区别
  • #include <>: 一般用户头文件;
  • #include “”: 自己头文件;

补充:gcc编译时查找头文件,按照以下路径顺序查找:

  • 1)gcc -I选项指定的头文件搜索路径。[可以指定多个路径依次查找]
gcc -I /usr/local/include/node a.c  
  • 2)环境变量C_INCLUDE_PATHCPLUS_INCLUDE_PATH中指定的路径;

  • 3)系统默认的路径,分别是 /usr/include/usr/local/include/usr/lib/gcc-lib/i386-linux/2.95.2/include(这个gcc库文件的路径,不同系统不一致)。

  • 4)相对路径。例如包含/usr/local/include/node/v8.h,则使用 #include<node/v8.h>

  • 参考链接:【未完待续…】

更多推荐

Mac使用homebrew安装OpenCV并运行Yolo-cpp-opencv笔记

本文发布于:2023-07-28 19:46:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1291660.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:笔记   OpenCV   homebrew   Mac   opencv

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!