我已经在我的PC上安装了vlfeat,并且似乎可以在netbeans上运行它。

我目前正在尝试使用vlfeat的quickshift函数,但是找不到有关如何执行以下操作的任何参考:

  • 使用quickshift以vlfeat的C / C++代码导入输入图像
    分割。
  • 我需要初始化一个快速转换对象'vl_qs_type'
    为此,我无法找到一种方法。

  • 任何帮助,将不胜感激。

    谢谢。

    最佳答案

    我还需要使用VLFeat的Quick Shift实现。以下代码片段说明了如何使用C++中的实现。当我使用OpenCV读取图像时,首先将OpenCV与VLFeat头文件一起包括在内:

    #include <opencv2/opencv.hpp>
    
    extern "C" {
        #include "generic.h"
        #include "quickshift.h"
    }
    

    下载VLFeat之后(在我的情况下,存档包含文件夹vlfeat-0.9.18),我使用CMake将vlfeat-0.9.18/vl添加为包含目录。否则,您必须调整以上代码。然后,以下代码读取图像,将图像转换为所需格式并运行Quick Shift。

    注意:以下代码片段仅是我原始代码的一部分,因此未经测试,如下所示。
    // Read an image using OpenCV, I assume a color image to be given;
    // the image will be loaded in BGR color space.
    cv::Mat mat = cv::imread("Lenna.png", CV_LOAD_IMAGE_COLOR);
    
    // Convert image to one-dimensional array.
    double* image = new double[mat.rows*mat.cols*mat.channels()];
    for (int i = 0; i < mat.rows; ++i) {
        for (int j = 0; j < mat.cols; ++j) {
            image[j + mat.cols*i + mat.cols*mat.rows*0] = mat.at<cv::Vec3b>(i, j)[0];
            image[j + mat.cols*i + mat.cols*mat.rows*1] = mat.at<cv::Vec3b>(i, j)[1];
            image[j + mat.cols*i + mat.cols*mat.rows*2] = mat.at<cv::Vec3b>(i, j)[2];
        }
    }
    
    // Create a new quickshift instance using the image, the height and width of the
    // image as well as the number of channels.
    VlQS* quickShift = vl_quickshift_new(image, mat.rows, mat.cols, mat.channels());
    vl_quickshift_set_kernel_size(quickShift, 5);
    
    // Run Quick Shift.
    vl_quickshift_process(quickShift);
    

    但是,我还不能弄清楚如何解释和使用实现的输出。

    10-08 19:18