Par*_*nce 6 c++ opencv feature-detection
我正在检测和匹配一对图像的特征,使用典型的检测器 - 描述符 - 匹配器组合,然后findHomography生成变换矩阵.
在此之后,我希望两个图像重叠(第二个(imgTrain)在第一个(imgQuery)上,所以我使用变换矩阵扭曲第二个图像:
cv::Mat imgQuery, imgTrain;
...
TRANSFORMATION_MATRIX = cv::findHomography(...)
...
cv::Mat imgTrainWarped;
cv::warpPerspective(imgTrain, imgTrainWarped, TRANSFORMATION_MATRIX, imgTrain.size());
Run Code Online (Sandbox Code Playgroud)
从这里开始,我不知道如何生成包含原始图像imgQuery与扭曲imgTrainWarped就可以了.我考虑两种情况:1)其中最终图像的大小是imgQuery
2的大小.其中最终图像的大小足以容纳两者,imgQuery并且imgTrainWarped因为它们仅部分地重叠,而不是完全重叠.我理解第二种情况可能在图像周围的某处有黑/空格.
你应该扭曲到与imgQuery之后尺寸相同的目标矩阵,遍历整个扭曲图像并将像素复制到第一个图像,但前提是扭曲图像实际上保持扭曲像素.通过扭曲另外的面具最容易做到这一点.请试试这个:
cv::Mat imgMask = cv::Mat(imgTrain.size(), CV_8UC1, cv::Scalar(255));
cv::Mat imgMaskWarped;
cv::warpPerspective(imgMask , imgMaskWarped, TRANSFORMATION_MATRIX, imgQuery.size());
cv::Mat imgTrainWarped;
cv::warpPerspective(imgTrain, imgTrainWarped, TRANSFORMATION_MATRIX, imgQuery.size());
// now copy only masked pixel:
imgTrainWarped.copyTo(imgQuery, imgMaskWarped);
Run Code Online (Sandbox Code Playgroud)
请尝试告诉我这是否正常并解决scenario 1.对于场景2,您将测试在变形之前图像的大小(通过使用变换)并将两个图像复制到足够大的目标图像.