基于ROS的opencv特征点提取

基于opencv特征点提取

因为最近想做图像处理、人脸检测/识别之类的相关开发,所以就开始补OpenCV的相关知识,便开个专栏用于记录学习历程和在学习过程。

在进行图片处理或者slam建图中,我们常常需要提取图像的特征点。图片的特征提取是深度学习中最为基础也是最为重要的研究问题,特征提取可以简单的看作一个数据降维过程,特征提取过程即是将图片数据转化为具有一定区分度的一定维度的向量的图片特征的过程。 利用图像特征进行图片运算,明显降低了存储和计算复杂度。

实现流程需要先订阅ros摄像头信息,用opencv内置函数处理,在通过ros节点发布出来,函数的实现原理我没有深究,有兴趣的同学可以自行查阅。一下是代码实现:

//ROSFAST特征点提取
#include "ros/ros.h"
#include "sensor_msgs/Image.h"
#include "cv_bridge/cv_bridge.h"
#include "sensor_msgs/image_encodings.h"

#include <iostream>
#include <string>
#include <vector>

#include <opencv2/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/features2d/features2d.hpp>

using namespace std;

ros::Publisher fast_pub;

void callback_rgb(const sensor_msgs::ImageConstPtr image_rgb_in){
    cv_bridge::CvImagePtr image_msg_bridge;
    image_msg_bridge = cv_bridge::toCvCopy(image_rgb_in,sensor_msgs::image_encodings::BGR8);
    cv::Mat image_cv = image_msg_bridge->image;

    cv::Ptr<cv::FastFeatureDetector> detector = cv::FastFeatureDetector::create(60);
    vector<cv::KeyPoint> keypoints;
    detector->detect(image_cv,keypoints);
    cv::Mat image_fast;
    cv::drawKeypoints(image_cv, keypoints, image_fast);

    sensor_msgs::ImagePtr fast_msg = cv_bridge::CvImage(std_msgs::Header(),"bgr8",image_fast).toImageMsg();
    fast_pub.publish(*fast_msg);
}

int main(int argc, char *argv[]){
    ros::init(argc,argv,"rosFast");
    ros::NodeHandle nh;

    fast_pub = nh.advertise<sensor_msgs::Image>("/fast_result", 10);
    ros::Subscriber sub_rgb = nh.subscribe("/camera/color/image_raw", 10, callback_rgb);

    ros::spin();
    
    return 0;
}

cmakelist配置文件在这篇博客中:

(151条消息) 基于OpenCv和ROS的图像灰度化处理_ego_vehicle的博客-CSDN博客icon-default.png?t=N176https://blog.csdn.net/qq_53576285/article/details/129547197?spm=1001.2014.3001.5501

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值