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

C++使用OpenCV调整图像大小时触发Segmentation Fault问题求助

问题排查与解决方法
  • 第一步:添加图像读取有效性校验
    绝大多数resize操作段错误都是读取到空Mat触发的,哪怕你认为可以正常展示图像,也先在imread后添加校验代码:
Mat image = imread("./test_image.jpg");
// 新增校验逻辑
if (image.empty()) {
    std::cerr << "图像读取失败,请检查文件路径、当前工作目录是否正确" << std::endl;
    return -1;
}

如果运行后提示读取失败,调整图像路径即可解决问题。

  • 第二步:检查编译链接配置是否正确
    Ubuntu环境下非常容易出现多版本OpenCV冲突的问题:如果你自行编译安装了OpenCV 4.5.4,同时系统还存在通过apt安装的旧版OpenCV,编译时头文件用了4.5.4版本,链接时却链接到旧版库,ABI不兼容就会触发resize等函数的段错误。
    1. 编译时必须使用对应版本的编译参数:OpenCV 4.x版本的pkg-config名称为opencv4,不要使用旧版的opencv,示例编译命令:
    g++ your_code.cpp -o test `pkg-config --cflags --libs opencv4`
    
    1. 确认链接的库版本正确:执行ldd ./test查看可执行文件链接的所有OpenCV相关动态库路径,确认路径指向你安装的4.5.4版本的库目录,而不是系统默认的/usr/lib/x86_64-linux-gnu/下的旧版库。
  • 第三步:修复多版本冲突
    如果确认是多版本冲突导致的问题,两种解决方案任选其一:
    1. 卸载系统自带的旧版OpenCV:执行sudo apt remove libopencv*清除所有apt安装的OpenCV相关包,之后重新编译你的代码即可。
    2. 编译时手动指定OpenCV路径:如果需要保留旧版,用CMake编译时在CMakeLists.txt中添加set(OpenCV_DIR "你的OpenCV4.5.4安装路径/lib/cmake/opencv4");用g++直接编译时在命令中添加库路径指定,例如:
    g++ your_code.cpp -o test -I/你的安装路径/include/opencv4 -L/你的安装路径/lib -Wl,-rpath=/你的安装路径/lib `pkg-config --cflags --libs opencv4`
    
  • 可选验证:指定resize插值参数
    如果以上步骤都确认无误,可以手动指定resize的插值参数排除参数异常问题,修改resize代码为:
cv::resize(image, dst, cv::Size(150,150), 0, 0, cv::INTER_LINEAR);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:39:01