1

由于我不会进入的原因,我需要将从存储在 Mat 对象中的图像中提取的 SURF 特征描述符转换为 byte[] 格式,这是 OpenImaj 关键点存储关键点描述符的格式。我我以正确的方式解决这个问题?

public LocalFeatureList<Keypoint> findFeatures(FImage image) {
    BufferedImage bimg = ImageUtilities.createBufferedImage(image);
     byte[] pixelsfalt = ((DataBufferByte)     bimg.getRaster().getDataBuffer()).getData();

    Mat matimage = new Mat(bimg.getWidth(),bimg.getHeight(),CvType.CV_8UC(1));
    matimage.put(0, 0, pixelsfalt);

    MatOfKeyPoint keypoints = new MatOfKeyPoint();
    Mat descriptor = new Mat();

    fd.detect(matimage, keypoints);
    surfExtractor.compute(matimage, keypoints, descriptor);

    //this is wrong as far as I know
    float [] desc = new float[descriptor.height()*descriptor.width()];
    descriptor.get(0,0,desc);

    LocalFeatureList<Keypoint> toReturn = new MemoryLocalFeatureList<Keypoint>();
    org.opencv.features2d.KeyPoint[] matkeys = keypoints.toArray();


    for(org.opencv.features2d.KeyPoint k : matkeys){

        Keypoint toAdd = new Keypoint();
        toAdd.x = (float) k.pt.x;
        toAdd.y = (float) k.pt.y;

        toAdd.scale = k.size;
        toAdd.ori = (float) Math.toRadians(k.angle);
        //so is this
        toAdd.ivec = new byte[128];
        toReturn.add(toAdd);
    }

    return toReturn;
}
4

0 回答 0