You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置OpenCV编译YOLO时遇pkg-config及头文件缺失错误求助

解决YOLO编译时的OpenCV相关错误

我的问题情况

我正在用YOLO做目标检测,想通过摄像头实现实时检测,于是把Makefile里的OPENCV改成1后重新编译,结果报错了:

gcc -Iinclude/ -Isrc/ -DOPENCV `pkg-config --cflags opencv` -Wall -Wno-unused-result -Wno-unknown-pragmas -Wfatal-errors -fPIC -Ofast -DOPENCV -c ./src/gemm.c -o obj/gemm.o 
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
In file included from ./src/utils.h:5:0, from ./src/gemm.c:2:
include/darknet.h:25:43: fatal error: opencv2/highgui/highgui_c.h: No such file or directory
compilation terminated.
Makefile:85: recipe for target 'obj/gemm.o' failed
make: *** [obj/gemm.o] Error 1

我已经在Anaconda里装了OpenCV,版本是3.4.1,验证没问题:

Python 2.7.14 |Anaconda, Inc.| (default, Dec 7 2017, 17:05:42)
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
3.4.1
>>>

解决办法

1. 定位Anaconda中OpenCV的pkg-config文件

Anaconda安装的OpenCV默认不会把opencv.pc(pkg-config依赖的配置文件)加入系统搜索路径,先找到它的位置:

  • 激活你的Anaconda环境:source activate 你的环境名(比如你用的Python2.7环境,名字可能是py27)
  • 用conda list opencv查看安装路径,一般会显示类似~/anaconda/envs/你的环境名/lib/python2.7/site-packages/cv2,往上找一级,pkgconfig目录大概率在~/anaconda/envs/你的环境名/lib/pkgconfig/下。如果这里没有opencv.pc,就手动创建一个。

2. 设置PKG_CONFIG_PATH环境变量

如果找到了opencv.pc,编译前把路径加到环境变量里:

export PKG_CONFIG_PATH=~/anaconda/envs/你的环境名/lib/pkgconfig:$PKG_CONFIG_PATH

替换成你实际的路径后,重新执行make试试。

3. 手动创建opencv.pc文件(找不到时使用)

要是你的Anaconda环境里没有这个文件,自己建一个放在刚才的pkgconfig目录下,内容如下(记得替换成你的路径和版本):

prefix=~/anaconda/envs/你的环境名
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.1
Libs: -L${libdir} -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs
Cflags: -I${includedir_old} -I${includedir_new}

保存后设置环境变量,再重新编译。

4. 修改Makefile绕开pkg-config(备选方案)

如果pkg-config的方法还是不行,直接在Makefile里硬编码OpenCV的路径:
打开Makefile,找到OPENCV=1的段落,改成这样:

OPENCV=1
ifeq ($(OPENCV), 1) 
COMMON+= -DOPENCV
CFLAGS+= -I~/anaconda/envs/你的环境名/include
LDFLAGS+= -L~/anaconda/envs/你的环境名/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs
endif

替换成你自己的路径,这样编译时就直接调用Anaconda里的OpenCV,不用依赖pkg-config查找。

5. 处理版本兼容性问题

报错里提到的opencv2/highgui/highgui_c.h在OpenCV3.x里已经被弃用,老版本YOLO是针对OpenCV2开发的,你有两个选择:

  • 换成OpenCV2.x版本,用conda安装:conda install opencv=2.4.13
  • 修改darknet代码,把#include <opencv2/highgui/highgui_c.h>替换成#include <opencv2/highgui/highgui.hpp>,同时调整相关的C风格API为C++风格(这个需要修改多处代码,比较麻烦,优先推荐第一种方案)。

内容的提问来源于stack exchange,提问作者amitnair92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:02:11