C++ 关键点描述符OpenCV
我试图理解如何在OpenCV中获取给定C++ 关键点描述符OpenCV,c++,opencv,keypoint,feature-descriptor,C++,Opencv,Keypoint,Feature Descriptor,我试图理解如何在OpenCV中获取给定关键点的描述符。到目前为止,我的代码如下所示: #include <iostream> #include "opencv2/opencv.hpp" typedef cv::Mat Image; int main(int argc, const char * argv[]) { Image imgA = cv::imread("images/buddhamulticam_total100.png",
关键点的描述符。到目前为止,我的代码如下所示:
#include <iostream>
#include "opencv2/opencv.hpp"
typedef cv::Mat Image;
int main(int argc, const char * argv[])
{
Image imgA = cv::imread("images/buddhamulticam_total100.png",
CV_LOAD_IMAGE_GRAYSCALE);
Image imgB = cv::imread("images/buddhamulticam_total101.png",
CV_LOAD_IMAGE_GRAYSCALE);
cv::Ptr<cv::FeatureDetector> detector =
cv::FeatureDetector::create("ORB");
cv::Ptr<cv::DescriptorExtractor> descriptor =
cv::DescriptorExtractor::create("ORB");
std::vector<cv::KeyPoint> keyPointsA, keyPointsB;
keyPointsA.push_back(cv::KeyPoint(0,0,5));
keyPointsB.push_back(cv::KeyPoint(10,10,5));
cv::Mat descriptorA, descriptorB;
descriptor->compute(imgA, keyPointsA, descriptorA);
descriptor->compute(imgB, keyPointsB, descriptorB);
std::cout << "DescriptorA (" << descriptorA.rows << "," <<
descriptorA.cols << ")" << std::endl;
std::cout << "DescriptorB (" << descriptorB.rows << ","
<< descriptorB.cols << ")" << std::endl;
return 0;
}
#包括
#包括“opencv2/opencv.hpp”
typedef cv::Mat图像;
int main(int argc,const char*argv[]
{
Image imgA=cv::imread(“images/buddhamulticam_total100.png”,
CV_加载_图像_灰度);
Image imgB=cv::imread(“images/buddhamulticam_total101.png”,
CV_加载_图像_灰度);
cv::Ptr检测器=
cv::FeatureDetector::创建(“ORB”);
cv::Ptr描述符=
cv::DescriptorExtractor::创建(“ORB”);
std::向量keyPointsA,keyPointsB;
关键点a.向后推(cv::关键点(0,0,5));
关键点b.向后推(cv::关键点(10,10,5));
cv::Mat描述符RA,描述符RB;
描述符->计算(imgA、keyPointsA、描述符);
描述符->计算(imgB、keyPointsB、描述符RB);
std::cout您正试图在点(0,0)和(10,10)上计算ORB,但它们太靠近图像边界,因此ORB无法计算这些位置的描述符。ORB(以及其他二进制描述符)会将它们过滤掉
编辑:由于您询问了用法,我正在编辑答案。您应该传递整个图像。我将其用作:
Ptr<FeatureDetector> detector = FeatureDetector::create(detector_name);
Ptr<DescriptorExtractor> descriptor = DescriptorExtractor::create(descriptor_name);
detector->detect(imgK, kp);
descriptor->compute(imgK, kp, desc);
Ptr-detector=FeatureDetector::create(检测器名称);
Ptr descriptor=DescriptorExtractor::create(描述符名称);
检测器->检测(imgK、kp);
描述符->计算(imgK、kp、desc);
让我明白,点是(0,0)和(10,10)?是的,这是opencv的文档所说的。好的,我明白了,但是创建关键点并将其传递给描述符牵引器
的方法是可以的?如果我在图像中取一个5x5的小补丁,在计算描述符时,我应该传递整个图像还是只传递该补丁?