你如何获得 cv::keypoint 的 x&y 坐标和大小?我总是得到一个段错误

How do you get x&y coordinates and size of a cv::keypoint? I keep getting a segfault

本文关键字:错误 一个 段错误 keypoint cv 何获得 坐标      更新时间:2023-10-16

我已经看了一遍又一遍各种各样的cv::KeyPoint资源,并遵循了许多提示,但到目前为止都无济于事。cv::KeyPoint类参考

// --- BLOB DETECTION --- //
    // Storage for blobs
    vector<KeyPoint> keypoints;
    // Set up detector with params
    Ptr<SimpleBlobDetector> detector = SimpleBlobDetector::create(params);  
    // Detect blobs
    detector->detect( camThresh, keypoints);
    // Draw keypoints
    drawKeypoints( camRaw, keypoints, camBlobs, Scalar(0,0,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS );

我很高兴我让这个工作到这一点,但我真的需要得到这些关键点的XY和大小值。最接近的建议,我几乎得到工作(见下文)抛出一个段错误。

float x = keypoints[i].pt.x;

Point2f p = keypoints[i].pt;

让我得到同样的结果。有人在建议中提到了同样的问题。有人有什么建议吗?谢谢!

我知道程序崩溃的原因了。我没有检查是否有任何活动的关键点。因此,如果程序在摄像机视图中没有任何内容就启动,它就会崩溃。可以完全有效地使用,例如:

        if(keypoints.size()>0) {
        if((char)keyboard == 'c') {
            float x0 = keypoints[0].pt.x;
            float y0 = keypoints[0].pt.y;
            cout << "Point0 Xpos = " << x0 << "n";
            cout << "Point0 Ypos = " << y0 << "n";
        }
    }

只要在程序启动时有一些对象被跟踪。一旦相机视图中没有任何内容,应用程序就会崩溃。

相关文章: