c++ opencv使用drawKeypoints、line实现特征点的连线显示

前言

图像经过算子处理后得到若干特征点,使用opencv进行渲染显示出这些特征点并且连线,更直观的对比处理前后的一些差异性

demo核心代码

//画出特征点并连线
void drawFilterLinePoints(cv::Mat& srcMat, cv::Point2f pointStart, cv::Point2f pointEnd, cv::Scalar color)
{
	std::vector<cv::KeyPoint> keypoints;
	keypoints.push_back({ pointStart, 0 });
	keypoints.push_back({ pointEnd, 0 });
	cv::drawKeypoints(srcMat, keypoints, srcMat, color);
	cv::line(srcMat, pointStart, pointEnd, color, 1, cv::LINE_AA);
}

//在QLabel中显示此处使用Qt方法对多个图片进行拼接,也可使用opencv拼接
QImage mergeImgHorizonal(std::vector<QImage>& images)
{
	int image_width = 0;
	int max_height = 0;
	std::vector<QImage>::iterator it;
	for (it = images.begin(); it != images.end(); ++it) {
		int width = (*it).width();
		image_width += width;
		if ((*it).height() > max_height) {
			max_height = (*it).height();
		}
	}
	QImage Roi_H(image_width, max_height, QImage::Format_RGB888);
	Roi_H.fill(Qt::black);
	QPainter painter;
	painter.begin(&Roi_H);
	int x_pos = 0;
	for (it = images.begin(); it != images.end(); ++it) {
		painter.drawImage(x_pos, 0, (*it));
		x_pos += (*it).width();
	}
	painter.end();
	return Roi_H;
}

效果展示

在这里插入图片描述

作者:费码程序猿
欢迎技术交流:QQ:255895056
转载请注明出处,如有不当欢迎指正

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 步骤如下: 1. 打开MySQL官网 (https://www.mysql.com/),点击"Downloads"菜单。 2. 在Downloads页面中,选择"MySQL Connector/J",然后点击"Download"按钮。 3. 在MySQL Connector/J页面中,选择适合你系统的版本,然后点击"Download"按钮。 4. 下载完成后,解压文件。 5. 在你的Java项目中,添加MySQL Connector/J JAR文件作为依赖项。 6. 配置数据库连接信息,使用JDBC驱动连接到MySQL数据库。 ### 回答2: 在使用OpenCV库进行SIFT(尺度不变特征变换)特征点识别时,我们可以通过以下步骤来识别多张图像的特征点并进行显示。 1. 导入相关库和模块: 首先,我们需要导入OpenCV库和其他必要的模块,例如`cv2`、`numpy`和`matplotlib`。 2. 加载图像数据: 使用`cv2.imread()`函数加载多张图像数据,并将其存储在不同的变量中。 3. 创建SIFT对象: 利用`cv2.SIFT_create()`函数创建一个SIFT对象。 4. 检测和计算特征点: 利用SIFT对象的`detectAndCompute()`方法来检测和计算图像中的特征点和特征描述符。此方法接受图像数据作为输入,并返回特征点坐标和描述符。 5. 特征点匹配: 使用特征描述符对多张图像的特征点进行匹配。可使用`cv2.BFMatcher()`函数创建一个Brute Force Matcher对象,并用其`match()`方法对特征描述符进行匹配。 6. 显示匹配结果: 将匹配结果可视化,可以使用`cv2.drawMatches()`函数来绘制匹配结果,并将其显示出来。 注意事项: - SIFT算法是有专利保护的,并且在OpenCV的最新版本中可能已被删除。如果无法使用SIFT算法,请使用SURF(加速稳健特征)或ORB(Oriented FAST and Rotated BRIEF)算法进行特征点识别。 - 在将图像数据加载到程序中时,确保图像路径是正确的,同时也要确保图像的内容对应于所需的识别结果。 - 在匹配特征点时,可以尝试不同的匹配算法和参数,以获得更准确的结果。 - 在绘制匹配结果时,可以根据需要自定义显示的大小和颜色。 以上是使用OpenCV库中的SIFT算法来识别多张图像的特征点并进行显示的简要步骤。具体实现的代码可以根据实际需求和环境进行相应的调整和优化。 ### 回答3: 使用OpenCV库中的SIFT算法可以方便地识别多张图像的特征点并显示。下面是一种实现方法: 1. 导入必要的库和模块: ```python import cv2 import numpy as np ``` 2. 加载图像: ```python img1 = cv2.imread('image1.jpg') img2 = cv2.imread('image2.jpg') ``` 3. 创建SIFT对象: ```python sift = cv2.SIFT_create() ``` 4. 检测特征点和计算特征描述符: ```python kp1, des1 = sift.detectAndCompute(img1, None) kp2, des2 = sift.detectAndCompute(img2, None) ``` 5. 对特征点进行可视化: ```python img1 = cv2.drawKeypoints(img1, kp1, img1, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) img2 = cv2.drawKeypoints(img2, kp2, img2, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) ``` 6. 显示图像: ```python cv2.imshow("Image 1", img1) cv2.imshow("Image 2", img2) cv2.waitKey() cv2.destroyAllWindows() ``` 这个实现过程使用OpenCV中的SIFT算法,他可以检测到图像中的特征点,并计算出每个特征点的特征描述符。然后使用`drawKeypoints`函数将特征点可视化显示在图像上,并通过`imshow`函数展示图像。最后使用`waitKey`和`destroyAllWindows`释放资源和关闭窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值