VLFeat의 Quick Shift 구현을 사용해야합니다. 다음 스 니펫은 C++에서 구현을 사용하는 방법을 보여줍니다. 나는 이미지를 읽을에서 OpenCV를 사용하고 때, 처음 함께 VLFeat 헤더 파일을 OpenCV를 포함
#include <opencv2/opencv.hpp>
extern "C" {
#include "generic.h"
#include "quickshift.h"
}
VLFeat, 내가 CMake를 사용으로 vlfeat-0.9.18/vl
을 추가 (내 경우 보관 폴더 vlfeat-0.9.18
포함) 다운로드 한 후이 디렉토리를 포함 . 그렇지 않으면 위의 코드를 조정해야합니다. 그런 다음, 다음 코드는 이미지를 읽고 이미지를 필요한 형식으로 변환하고 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);
그러나 구현의 결과를 해석하고 사용하는 방법을 아직 알지 못했습니다.