正如我在标题上写的那样,我需要一种方法来转换它们。 这就是我希望它发挥作用的方式:
我坚持到最后一步。 谢谢。
答案 0 :(得分:0)
快速执行此操作的方法是仅使用多边形内的点填充新的MatOfKeyPoint
,然后将其传递给DescriptorExtractor
。
这是一个使用C ++ API的例子(我不知道Java API),但我希望它能指出你正确的方向。
cv::Mat image; //Your image
std::vector<cv::Point2f> contour; //This is the contour you're testing
std::vector<cv::KeyPoint> keypoints; //From FAST detection
std::vector<cv::KeyPoint> in_polygon;
for (const cv::KeyPoint& key : keypoints)
{
if (cv::pointPolygonTest(contour, key.pt, true) > 0) //Inside polygon, ignore points on edge
{
in_polygon.push_back(key);
}
}
auto extractor = cv::DescriptorExtractor::create("ORB"); //ORB for example; I don't know which you're using
cv::Mat descriptors;
extractor->compute(image, in_polygon, descriptors);
您应该能够使用toList()
的{{1}}方法复制此功能。