【问题标题】:opencv error assertion with roi带有 roi 的 opencv 错误断言
【发布时间】:2016-04-01 10:00:41
【问题描述】:

我正在尝试使用 HOG 分类器检测人和其他物体。我首先使用以下代码检测人:

    capt >> frame_capture;
    capt1 >> frame_capture1;
    cv::cvtColor(frame_capture1,gray, CV_RGB2GRAY);
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;
    findContours(gray,contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
    vector <Rect> listOfRectangles;
    // detecting objects 
    listOfRectangles = drawBoundingBox(contours);

if(!frame_capture.empty()){
    for (int i =0; i<listOfRectangles.size();++i)
    {
        //rectangle (frame_capture, listOfRectangles[i],Scalar(255,255,0),1,8,0); //! display detections
        cv::Mat roi;
        roi.create(frame_capture.size(),CV_8UC3);
        cv::Mat image=imread("");   
         roi = image(listOfRectangles[i]);
            cv::Mat window;
            cv::resize(roi, window, cv::Size(64, 128));
            hog.detect(window, foundLocations);
            if (!foundLocations.empty())
            {
            cout << "person .." << endl;
            }   
    }

//oVideoWriter.write(frame_capture);
    imshow("video",frame_capture);
    waitKey(25);
}    

我收到了这个错误:

OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in Mat

我用过这个链接:OpenCV: How to use HOGDescriptor::detect method?

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    当您使用imread() 时,您传递的是一个空路径,因此找不到图像并且cv::Mat image 没有数据。在下一行中,您尝试获取空图像的子图像 (ROI),这就是您收到错误的原因。

    您需要正确初始化您的cv::Mat image。您可以通过在该行之后添加一个简单的验证来检查一切是否正常,例如

    if(! image.data )                              // Check for invalid input
    {
        std::cout <<  "Could not open or find the image" << std::endl ;
        return;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 2015-12-26
      相关资源
      最近更新 更多