parent
68327492bf
commit
c5abb82899
@ -0,0 +1,60 @@
|
||||
#include "Arith_FusionMap.h"
|
||||
#include "Arith_Utils.h"
|
||||
MapFusion::MapFusion(FileCache<FrameCache>* cache)
|
||||
{
|
||||
_cache = cache;
|
||||
}
|
||||
|
||||
MapFusion::~MapFusion()
|
||||
{
|
||||
}
|
||||
|
||||
void MapFusion::DirectMap(vector<KeyType> frameInd, cv::Mat mapH, cv::Mat pan, cv::Mat pan_mask)
|
||||
{
|
||||
pan.setTo(0);
|
||||
|
||||
// 从文件缓存获取帧
|
||||
auto _t_frame_cache = std::make_shared<FrameCache>();
|
||||
for (size_t i = 0; i < frameInd.size(); i++)
|
||||
{
|
||||
KeyType key = frameInd[i];
|
||||
bool flag = _cache->get(key, _t_frame_cache);
|
||||
|
||||
if (!flag)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// 读取当前H
|
||||
cv::Mat H1 = cv::Mat(3, 3, CV_64FC1, _t_frame_cache->H);
|
||||
|
||||
// 与全景图的H相乘
|
||||
cv::Mat H = mapH * H1;
|
||||
|
||||
// 利用H投影当前帧到全景
|
||||
cv::Mat imagetmp(pan.size(), CV_8UC3, cv::Scalar(0, 0, 0));
|
||||
|
||||
// 获取图像数据
|
||||
cv::Mat src = getRGBAMatFromGDFrame(_t_frame_cache->_frame_info, _t_frame_cache->_data);
|
||||
|
||||
cv::warpPerspective(src, imagetmp, H, imagetmp.size(), cv::INTER_LINEAR, cv::BORDER_TRANSPARENT);
|
||||
|
||||
cv::Mat mask = cv::Mat::ones(cv::Size(src.cols - 200, src.rows - 200), CV_8UC1) * 255;
|
||||
cv::Mat warped_mask;
|
||||
cv::warpPerspective(mask, warped_mask, H, imagetmp.size(), cv::INTER_LINEAR);
|
||||
imagetmp.copyTo(pan, warped_mask);
|
||||
|
||||
// 保存遮罩
|
||||
warped_mask.copyTo(pan_mask, warped_mask);
|
||||
|
||||
//imshow("mask", pan_mask);
|
||||
//waitKey(1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void MapFusion::FusionMap(vector<KeyType> frameInd, cv::Mat mapH, cv::Mat pan, cv::Mat pan_mask)
|
||||
{
|
||||
}
|
Loading…
Reference in new issue