c++ 封装edlines线特征提取函数

        要在C++中封装函数,可以创建一个类,并将函数定义为该类的成员函数。下面是一个例子,说明如何在C++中使用edlines封装一个用于特征提取的函数:

头文件 函数声明

// edlines_feature_extractor.h
#ifndef EDLINES_FEATURE_EXTRACTOR_H
#define EDLINES_FEATURE_EXTRACTOR_H

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

class EdlinesFeatureExtractor {
public:
    EdlinesFeatureExtractor();
    ~EdlinesFeatureExtractor();
    void extractFeatures(const cv::Mat& image, std::vector<cv::KeyPoint>& keypoints, cv::Mat& descriptors);
};

#endif // EDLINES_FEATURE_EXTRACTOR_H

源文件 函数实现

// edlines_feature_extractor.cpp
#include "edlines_feature_extractor.h"
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/line_descriptor/descriptor.hpp>

EdlinesFeatureExtractor::EdlinesFeatureExtractor() {}

EdlinesFeatureExtractor::~EdlinesFeatureExtractor() {}

void EdlinesFeatureExtractor::extractFeatures(const cv::Mat& image, std::vector<cv::KeyPoint>& keypoints, cv::Mat& descriptors) {
    // Convert the image to grayscale
    cv::Mat grayImage;
    cv::cvtColor(image, grayImage, cv::COLOR_BGR2GRAY);

    // Detect lines using the EDLines algorithm
    std::vector<cv::line_descriptor::KeyLine> keylines;
    cv::Ptr<cv::line_descriptor::BinaryDescriptor> binaryDescriptor = cv::line_descriptor::BinaryDescriptor::createBinaryDescriptor();
    binaryDescriptor->detect(grayImage, keylines);

    // Convert the KeyLines to KeyPoints
    for (const auto& keyline : keylines) {
        cv::KeyPoint keypoint(keyline.pt, keyline.size, keyline.angle, keyline.response, keyline.octave, keyline.class_id);
        keypoints.push_back(keypoint);
    }

    // Compute the descriptors for the KeyPoints
    binaryDescriptor->compute(grayImage, keylines, descriptors);
}

调用

        在本例中,我们定义了一个EdlinesFeatureExtractor类,它具有一个成员函数extractFeatures,该函数使用EDLines算法获取输入图像并输出一组关键点和描述符。

        要使用该类,可以创建EdlinesFeatureExtractor的实例,并对输入图像调用extractFeatures函数。下面是一个如何使用该类的示例:

#include "edlines_feature_extractor.h"
#include <opencv2/highgui/highgui.hpp>

int main() {
    // Load an image
    cv::Mat image = cv::imread("path/to/image.jpg");

    // Create an instance of EdlinesFeatureExtractor
    EdlinesFeatureExtractor extractor;

    // Extract features from the image
    std::vector<cv::KeyPoint> keypoints;
    cv::Mat descriptors;
    extractor.extractFeatures(image, keypoints, descriptors);

    // Display the keypoints on the image
    cv::Mat outputImage;
    cv::drawKeypoints(image, keypoints, outputImage);
    cv::imshow("Keypoints", outputImage);
    cv::waitKey(0);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Yangy_Jiaojiao/article/details/130324223
今日推荐