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
相关产品推荐
相关产品推荐

