QT 中使用 OpenCv 的 CascadeClassifier 报错

本文解决了一个在QT环境下使用OpenCv进行人脸检测时遇到的段错误问题。通过调整编译配置,避免了libopencv_objdetect.so版本冲突,成功解决了问题。
问题

在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候,在构造函数中进行检测器的初始化,随后调用相机读取图片的时候就会报错,报的错误是 Segment Fault (段错误)

解决

尝试使用 gdb,valgrind 等解决没有进展
在 QT 中进行编译的时候,报了一个警告,大概意思是说 libopencv_objdetect.so.3.4.3 和 libopencv_objdetect.so.4.0 会冲突
于是在不适用 QT 的项目中 使用 ldd 查看了一下编译出来的二进制程序依赖的库文件,发现使用的是 libopencv_objdetect.so.4.0 于是在 QT 的 xxx.pro 的编译配置文件中,把所有非 libopencv_objdetect.so.4.0 的库文件都注释掉
哈哈哈,问题解决啦

在配置 QtOpenCV 时遇到 **"Error in configuration process, project files may be invalid"** 错误,通常是由多个潜在问题引起的。以下是对该错误的详细分析及解决方案。 ### 常见原因与解决方法 #### 1. CMake 配置不正确 OpenCV 的构建依赖于 CMake 来生成项目文件。如果 CMake 没有正确配置,可能导致生成的项目文件无效。例如,在引用中提到 `file DOWNLOAD HASH mismatch` 错误[^1],这表明下载过程中文件校验失败,可能是网络问题或源服务器不稳定导致的。 - **解决方案**: - 手动下载缺失或损坏的文件(如 `opencv_ffmpeg.dll`),并将其放置到正确的目录中。 - 修改 CMake 缓存变量 `OPENCV_DOWNLOAD_EXTERNAL_TEST_DATA` 为 `OFF`,避免自动下载测试数据。 - 使用镜像站点或本地缓存版本进行构建。 #### 2. 编译器路径或环境变量未设置 Qt 项目依赖于正确的编译器路径和环境变量设置。如果系统没有正确识别编译器路径(如 MinGW 或 MSVC)[^3],CMake 将无法生成有效的项目文件。 - **解决方案**: - 确保在 Qt Creator 中选择正确的编译器工具链(如 MinGW、MSVC)。 - 检查系统环境变量是否包含编译器路径(如 `C:\MinGW\bin`)。 - 在 CMake 配置时指定编译器路径: ```bash cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ``` #### 3. OpenCV 构建目标与 Qt 不兼容 如果 OpenCV使用不同于 Qt 的编译器构建的(例如用 MSVC 构建 OpenCV,却尝试在 Qt Creator 中使用 MinGW 编译项目),会导致链接失败和配置错误。 - **解决方案**: - 使用Qt 相同的编译器重新构建 OpenCV。例如,若使用的是 Qt 的 MinGW 版本,则应使用 MinGW 编译 OpenCV。 - 在 CMake 配置 OpenCV 时明确指定编译器类型: ```bash cmake -G "MinGW Makefiles" .. ``` #### 4. Qt 项目文件 `.pro` 配置错误 Qt 项目文件中的库路径或链接配置错误也可能导致配置失败。 - **示例 `.pro` 文件配置**: ```qmake QT += core gui widgets TARGET = QtOpenCVExample TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h # OpenCV 包含路径 INCLUDEPATH += C:/opencv/build/include # Windows 下链接 OpenCV 库 win32 { LIBS += -LC:/opencv/build/x64/mingw/lib \ -lopencv_core450 \ -lopencv_highgui450 \ -lopencv_imgproc450 } ``` #### 5. CMake 缓存残留问题 旧的 CMake 缓存可能包含错误信息,影响新配置的生成。 - **解决方案**: - 删除 `CMakeCache.txt` 和 `CMakeFiles/` 目录后重新运行 CMake。 ```bash rm -rf CMakeCache.txt CMakeFiles/ cmake .. ``` #### 6. 使用预编译库替代手动构建 如果构建过程过于复杂,可以考虑使用官方提供的预编译 OpenCV 库,减少配置难度。 - **下载地址**:[OpenCV SourceForge](https://sourceforge.net/projects/opencvlibrary/files/) - **使用方法**: - 解压后将 `build\x64\mingw\lib` 中的 `.dll` 和 `.a` 文件复制到项目目录。 - 在 `.pro` 文件中添加对应的库路径和链接项。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值