【问题标题】:Loading keypoints and drawing加载关键点和绘图
【发布时间】:2015-01-08 23:21:53
【问题描述】:

我有一段代码可以计算图像的 SURF 关键点并将它们保存到 yml 文件中。然后我尝试加载该文件并在图像上绘制保存的关键点。

关键点并编写代码:

cv::Mat img_1 = cv::imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);
detectKeypointsImage(img_1);
int minHessian = 400;
cv::SurfFeatureDetector detector(minHessian);
std::vector<cv::KeyPoint> keypoints_1;
detector.detect(img_1, keypoints_1);
cv::Mat img_keypoints_1;
drawKeypoints(img_1, keypoints_1, img_keypoints_1);
cv::FileStorage fs("keypointsVW.yml", cv::FileStorage::WRITE);
write(fs, "keypoints_1", keypoints_1);
fs.release();

为了测试这是否有效,我将上面的块注释掉,减去以下几行:

cv::Mat img_1 = cv::imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE);

cv::Mat img_keypoints_1;

然后我使用以下代码读取关键点并将它们绘制在图像上:

std::vector<cv::KeyPoint> testPoints;
cv::FileStorage fs2("keypointsVW.yml", cv::FileStorage::READ);
cv::FileNode kptFileNode = fs2["keypointsVW"];
read(kptFileNode, testPoints);
fs2.release();
drawKeypoints(img_1, testPoints, img_keypoints_1);
cv::imshow("keypoints_1", img_keypoints_1);

但是,当程序启动时,它显示的图像减去任何关键点。为什么会这样?

【问题讨论】:

  • 从未使用过存储,但你可以试试cv::FileNode kptFileNode = fs2["keypoints_1"]; 吗?
  • 成功了,谢谢,我想我已经盯着它太久了。
  • 自己测试了一下,写了答案:)

标签: c++ opencv yaml surf keypoint


【解决方案1】:

我从未使用过存储功能,但直觉上我认为您在加载数据时将 FileNode 命名错误。

我测试了这段代码,它可以工作:

std::vector<cv::KeyPoint> testPoints;
cv::FileStorage fs2("keypointsVW.yml", cv::FileStorage::READ);
cv::FileNode kptFileNode = fs2["keypoints_1"]; // Here you must use the name that you used for writing the data within the file. 
    // You named it "keypoints_1" before. 
    // It must be the same name that you used in write(fs, "keypoints_1", keypoints_1);
    // so for example write(storage, "nodeName", data); needs you to call cv::FileNode kptFileNode = fs2["nodeName"]; later

read(kptFileNode, testPoints);
fs2.release();
drawKeypoints(img_1, testPoints, img_keypoints_1);
cv::imshow("keypoints_1", img_keypoints_1);

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 2016-06-11
    • 2017-01-06
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    相关资源
    最近更新 更多