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

OpenCV 4.8.1调用findContours()函数出现段错误求助

问题:调用findContours()时触发Segmentation Fault

我尝试对摄像头采集的帧进行轮廓检测与绘制,运行程序时出现segmentation fault错误,且错误明确发生在调用findContours()函数的环节。该函数之前的灰度转换、阈值处理步骤均能正常执行,逻辑完全一致的Python代码可以正常运行,但C版本出现此问题,我了解这是C开发中的常见错误。

代码

#include <opencv2/opencv.hpp>

int main() {
    cv::VideoCapture cap(0, cv::CAP_V4L);
    if (!cap.isOpened()) {
        std::cerr << "Error: Could not open camera." << std::endl;
        return -1;
    }

    // 设置宽高
    cap.set(cv::CAP_PROP_FRAME_WIDTH, 1280);
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, 720);

    // 检查设置是否成功应用
    double width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
    double height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);

    // std::cout << "Width: " << width << ", Height: " << height << std::endl;

    while (true) {
        cv::Mat image;
        if (!cap.read(image)) {
            std::cerr << "Error: Could not read frame from the camera." << std::endl;
            break;
        }

        // 转换为灰度图
        cv::Mat img_gray;
        cv::cvtColor(image, img_gray, cv::COLOR_BGR2GRAY);
        
        // 应用二值化阈值处理
        cv::Mat thresh;
        cv::threshold(img_gray, thresh, 150, 255, cv::THRESH_BINARY);
        
        // 使用cv.CHAIN_APPROX_NONE检测二值图像的轮廓
        std::vector<std::vector<cv::Point>> contours;
        std::vector<cv::Vec4i> hierarchy;
        cv::findContours(thresh, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_NONE);

        // 在原始图像上绘制轮廓
        cv::Mat image_copy = image.clone();
        cv::drawContours(image_copy, contours, -1, cv::Scalar(0, 0, 255), 2);

        // 显示处理后的帧
        cv::imshow("Webcam", image_copy);

        // 按下ESC键退出循环
        if (cv::waitKey(1) == 27) {
            break;
        }
    }

    return 0;
}

编译命令

g++ -o main.o main.cpp -I/usr/local/include/opencv4 -lopencv_videoio -lopencv_highgui -lopencv_core -lopencv_imgproc

系统信息

  • Ubuntu 22.04 (x86_64)
  • OpenCV 4.8.1
  • 驱动版本:545.23.08
  • CUDA版本:12.3
  • GCC/G++版本:11.4.0

OpenCV构建配置

cmake -D CMAKE_BUILD_TYPE=RELEASE \
         -D CMAKE_INSTALL_PREFIX=/usr/local \
         -D INSTALL_C_EXAMPLES=OFF \
         -D INSTALL_PYTHON_EXAMPLES=OFF \
         -D WITH_TBB=ON \
         -D WITH_CUDA=ON \
         -D ENABLE_FAST_MATH=ON \
         -D NVCUVID_FAST_MATH=ON \
         -D CUDA_FAST_MATH=ON \
         -D WITH_CUBLAS=ON \
         -D BUILD_opencv_java=OFF \
         -D BUILD_ZLIB=ON \
         -D BUILD_TIFF=ON \
         -D WITH_GTK=ON \
         -D WITH_NVCUVID=ON \
         -D WITH_FFMPEG=ON \
         -D WITH_1394=ON \
         -D BUILD_PROTOBUF=ON \
         -D OPENCV_GENERATE_PKGCONFIG=ON \
         -D OPENCV_PC_FILE_NAME=opencv4.pc \
         -D OPENCV_ENABLE_NONFREE=OFF \
         -D WITH_GSTREAMER=ON \
         -D WITH_V4L=ON \
         -D WITH_QT=ON \
         -D WITH_CUDNN=ON \
         -DBUILD_opencv_dnn=OFF \
         -D WITH_OPENGL=ON \
         -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
         -D BUILD_EXAMPLES=ON ..

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:07:19