opencv - JavaCV 计算 SIFT 关键点的 ORB 描述符

标签 opencv sift javacv orb

我在计算 SIFT 检测器找到的关键点的 ORB 描述符时遇到很大问题。如果我尝试运行一个简单的示例程序,整个系统就会卡住,我不明白为什么。示例代码如下:

import static com.googlecode.javacv.cpp.opencv_highgui.cvLoadImageM;

import com.googlecode.javacv.cpp.opencv_core.CvMat;
import com.googlecode.javacv.cpp.opencv_features2d.DescriptorExtractor;
import com.googlecode.javacv.cpp.opencv_features2d.FeatureDetector;
import com.googlecode.javacv.cpp.opencv_features2d.KeyPoint;
import com.googlecode.javacv.cpp.opencv_features2d.ORB;
import com.googlecode.javacv.cpp.opencv_nonfree.SIFT;

public class DescriptorTest {

    public static void main(String[] args) {
        SIFT sift = new SIFT(0, 3, 0.04, 10, 1.6);
        FeatureDetector detector = sift.getFeatureDetector();
        ORB orb_descriptor = new ORB(500, 1.2f, 8, 31, 0, 2, 0, 31);
        DescriptorExtractor descriptor = orb_descriptor.getDescriptorExtractor();        
        CvMat image = cvLoadImageM("res/dvd_009_ref.jpg");
        KeyPoint keypoints = new KeyPoint();
        CvMat descriptors = new CvMat(null);
        detector.detect(image, keypoints, null);
        System.out.println("Keypoints found: "+ keypoints.capacity());
        descriptor.compute(image, keypoints, descriptors);
        System.out.println("Descriptors calculated: "+descriptors.rows());
    }
}

有人知道问题出在哪里吗?那就太好了:)

最佳答案

好吧,如果我将关键点的 Octave 设置为 0,它似乎可以工作。我还不知道这是否是一个好主意,但我倾向于说不。因为对于某些描述符来说,发现特征的尺度空间 Octave 音程的信息至关重要。

for(int i = 0; i < keypoints.capacity(); i++) {
    KeyPoint kp = keypoints.position(i);
    kp.octave(0);
}
keypoints.position(0);

关于opencv - JavaCV 计算 SIFT 关键点的 ORB 描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11634551/

相关文章:

android - 使用 imread OpenCV 读取图像时出错

java.lang.UnsatisfiedLinkError : org. opencv.core.Mat.n_Mat(IIILjava/nio/ByteBuffer;)J

JavaCV 示例/教程

java - 如何将网络摄像头捕获的图像与 Java Swing 中的另一个图像进行匹配?

python - Python的OpenCV的cv2.KMEANS_RANDOM_CENTERS

image-processing - SIFT预测

macos - “SIFT”不是 ‘cv’ 的成员

linux - 逐帧更改相机曝光

c++ - 使用 Kinect 1.0 SDK 将深度图像拟合为 RGB 图像时遇到问题

CV Hough Circle参数检测圆