Opencv学习笔记之——画出两帧的特征点之间的对应关系
Posted gwpscut
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Opencv学习笔记之——画出两帧的特征点之间的对应关系相关的知识,希望对你有一定的参考价值。
void FeatureTracker::event_drawTrack(const cv::Mat &imLeft, const cv::Mat &imRight,
vector<int> &curLeftIds,
vector<cv::Point2f> &curLeftPts,
vector<cv::Point2f> &curRightPts,
map<int, cv::Point2f> &prevLeftPtsMap)
{//画图的时候,imTrack是个全局变量,用于输出当前帧以及其检测的特征点
//int rows = imLeft.rows;
int cols = imLeft.cols;
if (!imRight.empty())
cv::hconcat(imLeft, imRight, imTrack);//将两张图像水平接起来
else
imTrack = imLeft.clone();
cv::cvtColor(imTrack, imTrack, CV_GRAY2RGB);//变为黑白
for (size_t j = 0; j < curLeftPts.size(); j++)
{
double len = std::min(1.0, 1.0 * track_cnt[j] / 20);//跟踪数少于20次,len为0,这样为蓝色。当跟踪大于20次,len为1,这样点为红色
cv::circle(imTrack, curLeftPts[j], 2, cv::Scalar(255 * (1 - len), 0, 255 * len), 2);
}
if (!imRight.empty())
{
// for (size_t i = 0; i < curRightPts.size(); i++)
// {
// cv::Point2f rightPt = curRightPts[i];
// rightPt.x += cols;
// cv::circle(imTrack, rightPt, 2, cv::Scalar(0, 255, 0), 2);//cvScalar的储存顺序是B-G-R
// cv::Point2f leftPt = curLeftPts[i];
// cv::line(imTrack, leftPt, rightPt, cv::Scalar(0, 255, 0), 1, 8, 0);
// }
map<int, cv::Point2f>::iterator mapIt;
for (size_t i = 0; i < curLeftIds.size(); i++)
{
int id = curLeftIds[i];
mapIt = prevLeftPtsMap.find(id);//这是之前的特征点
cv::Point2f rightPt = mapIt->second;
rightPt.x += cols;
if(mapIt != prevLeftPtsMap.end()){
cv::circle(imTrack, rightPt, 2, cv::Scalar(0, 0,255), 1.5);//将其点画出来,绿色
cv::Point2f leftPt = curLeftPts[i];
// cv::line(imTrack, leftPt, rightPt, cv::Scalar(0, 255, 0), 1, 8, 0);
cv::arrowedLine(imTrack, leftPt, rightPt, cv::Scalar(0, 255, 0), 1, 8, 0, 0.02);//绿色的
// cv::arrowedLine(imTrack, curLeftPts[i], mapIt->second, cv::Scalar(0, 255, 0), 1, 8, 0, 0.2);//绿色的
}
}
}
以上是关于Opencv学习笔记之——画出两帧的特征点之间的对应关系的主要内容,如果未能解决你的问题,请参考以下文章