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

将cv::Mat转换为dlib::cv_image失败求助,附报错及环境配置

解决cv::Mat转Dlib图像格式的编译错误

问题原因

你使用的Dlib 19.6.0属于较旧版本,其OpenCV接口依赖于旧的C风格IplImage类型,而OpenCV 3.x及以后默认采用C++风格的cv::Mat。当直接将cv::Mat传入dlib::cv_image构造函数时,内部尝试隐式转换const cv::Mat到IplImage失败,触发编译错误。

解决方案

方案1:显式转换cv::Mat到IplImage

修改转换代码,先将cv::Mat显式转为IplImage再传入dlib::cv_image:

// 替换原转换代码段
dlib::array2d<dlib::bgr_pixel> newImage;
IplImage ipl_img = image; // 显式完成cv::Mat到IplImage的转换
dlib::assign_image(newImage, dlib::cv_image<dlib::bgr_pixel>(&ipl_img));

注意:若你的cv::Mat是const类型,需确保转换时权限匹配,当前代码中image为非const,可直接使用。

方案2:升级Dlib版本

Dlib 19.10及以后版本已完全适配OpenCV的cv::Mat类型,无需显式转换即可正常运行原代码。升级步骤如下:

  1. 卸载旧版本Dlib(源码编译安装的情况):
sudo rm -rf /usr/local/include/dlib /usr/local/lib/libdlib*
  1. 从Dlib官方仓库下载最新源码,解压后进入源码目录执行编译安装:
mkdir build && cd build
cmake .. -DDLIB_USE_CUDA=OFF # 根据硬件需求决定是否开启CUDA支持
make -j$(nproc)
sudo make install

额外的CMakeLists.txt优化

你的CMakeLists中include_directories("/usr/local/include/opencv4/opencv2")属于冗余配置,find_package(OpenCV REQUIRED)已自动处理OpenCV的头文件路径,删除该行可避免路径冲突:

cmake_minimum_required(VERSION 3.15)
set(CMAKE_CXX_STANDARD 17)
project( trainModel )
find_package( OpenCV REQUIRED )
find_package(dlib REQUIRED)
add_executable( trainModel trainModel.cpp )
target_link_libraries( trainModel ${OpenCV_LIBS} dlib::dlib )
install( TARGETS trainModel DESTINATION bin) 

验证修改

修改后重新编译项目:

mkdir build && cd build
cmake ..
make

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:14:55