[续集]关于opencv2.4.10-3.3.1左右版本的特征点剔除与显示问题

上下显示+左右显示 

cv::Mat UpDownDrawInlier(const cv::Mat &queryImage, const cv::Mat &objectImage, 
	const vector<cv::Point2f> &queryCoord, const vector<cv::Point2f> &objectCoord)
{
	Size sz = Size(queryImage.size().width, 
		queryImage.size().height + objectImage.size().height);
	Mat matchingImage = Mat::zeros(sz, CV_8UC3);

	// 设置matchingImage的感兴趣区域大小并赋予原图
	Mat roi1 = Mat(matchingImage, Rect(0, 0, queryImage.size().width, queryImage.size().height));
	queryImage.copyTo(roi1);
	Mat roi2 = Mat(matchingImage, Rect(0, queryImage.size().height, objectImage.size().width, objectImage.size().height));
	objectImage.copyTo(roi2);

	//画出点
	for (int i = 0; i < (int)queryCoord.size(); ++i) {
		Point2f pt1 = queryCoord[i];
		Point2f pt2 = objectCoord[i];
		Point2f from = pt1;
		Point2f to = Point(pt2.x, queryImage.size().height + pt2.y);
		line(matchingImage, from, to, Scalar(0, 255, 255));
	}
	return matchingImage;
}

cv::Mat LeftRightDrawInlier(const cv::Mat &queryImage, const cv::Mat &objectImage,
	const vector<cv::Point2f> &queryCoord, const vector<cv::Point2f> &objectCoord)
{
	Size sz = Size(queryImage.size().width + objectImage.size().width,
		queryImage.size().height);
	Mat matchingImage = Mat::zeros(sz, CV_8UC3);

	// 设置matchingImage的感兴趣区域大小并赋予原图
	Mat roi1 = Mat(matchingImage, Rect(0, 0, queryImage.size().width, queryImage.size().height));
	queryImage.copyTo(roi1);
	Mat roi2 = Mat(matchingImage, Rect(queryImage.size().width, 0, objectImage.size().width, objectImage.size().height));
	objectImage.copyTo(roi2);

	//画出点
	for (int i = 0; i < (int)queryCoord.size(); ++i) {
		Point2f pt1 = queryCoord[i];
		Point2f pt2 = objectCoord[i];
		Point2f from = pt1;
		Point2f to = Point(pt2.x + queryImage.size().width, pt2.y);
		line(matchingImage, from, to, Scalar(0, 255, 255));
	}
	return matchingImage;
}

左上右下+左下右上

cv::Mat LeftUpRightDownDrawInlier(const cv::Mat &queryImage, const cv::Mat &objectImage,
	const vector<cv::Point2f> &queryCoord, const vector<cv::Point2f> &objectCoord)
{
	Size sz = Size(queryImage.size().width + objectImage.size().width,
		queryImage.size().height + objectImage.size().height);
	Mat matchingImage = Mat::zeros(sz, CV_8UC3);

	// 设置matchingImage的感兴趣区域大小并赋予原图
	Mat roi1 = Mat(matchingImage, Rect(0, 0, queryImage.size().width, queryImage.size().height));
	queryImage.copyTo(roi1);
	Mat roi2 = Mat(matchingImage, Rect(queryImage.size().width, queryImage.size().height, objectImage.size().width, objectImage.size().height));
	objectImage.copyTo(roi2);

	//画出点
	for (int i = 0; i < (int)queryCoord.size(); ++i) {
		Point2f pt1 = queryCoord[i];
		Point2f pt2 = objectCoord[i];
		Point2f from = pt1;
		Point2f to = Point(pt2.x + queryImage.size().width, pt2.y + queryImage.size().height);
		line(matchingImage, from, to, Scalar(0, 255, 255));
	}
	return matchingImage;
}

cv::Mat LeftDownRightUpDrawInlier(const cv::Mat &queryImage, const cv::Mat &objectImage,
	const vector<cv::Point2f> &queryCoord, const vector<cv::Point2f> &objectCoord)
{
	Size sz = Size(queryImage.size().width + objectImage.size().width,
		queryImage.size().height + objectImage.size().height);
	Mat matchingImage = Mat::zeros(sz, CV_8UC3);

	// 设置matchingImage的感兴趣区域大小并赋予原图
	Mat roi1 = Mat(matchingImage, Rect(0, objectImage.size().height, queryImage.size().width, queryImage.size().height));
	queryImage.copyTo(roi1);
	Mat roi2 = Mat(matchingImage, Rect(queryImage.size().width, 0, objectImage.size().width, objectImage.size().height));
	objectImage.copyTo(roi2);

	//画出点
	for (int i = 0; i < (int)queryCoord.size(); ++i) {
		Point2f pt1 = queryCoord[i];
		Point2f pt2 = objectCoord[i];
		Point2f from = Point(pt1.x, pt1.y + objectImage.size().height);
		Point2f to = Point(pt2.x + queryImage.size().width, pt2.y);
		line(matchingImage, from, to, Scalar(0, 255, 255));
	}
	return matchingImage;
}

猜你喜欢

转载自blog.csdn.net/baidu_40840693/article/details/83067565