4

に変換するのに助けが必要IplImageですMat。画像を計算してから SVM で分類したいのですHOGDescriptorが、「計算」にはMat型が必要です。

javaに変換する方法の例を挙げていただけますIplImageか?Mat

4

3 に答える 3

3

IplImage を Mat に変換するのは簡単です。

IplImage iplImage= cvLoadImage("image.png");

Mat matImage = new Mat(iplImage);

逆に

于 2016-09-18T20:05:30.487 に答える
2

ここに文書化されている公式の OpenCV Java バインディングと、文書化されていないJavaCVプロジェクトを混同しないでください。

を使用している場合、 を使用するためにJavaCVを変換する必要はありません。ソースでわかるように、オブジェクト ラッパーはオブジェクトを操作します。IplImageHOGDescriptorJavaCVHOGDescriptorCvArr

// javacv/cpp/opencv_objdetect.java:527
public static class HOGDescriptor extends Pointer {
    public HOGDescriptor();
    ...
    public native void setSVMDetector(CvArr _svmdetector);
    ...
    public native void compute(CvArr img, FloatPointer descriptors, CvSize winStride, CvSize padding, CvPoint locations);
    public native void detect(CvArr img, CvPoint foundLocations, DoublePointer weights, double hitThreshold, CvSize winStride, CvSize padding, CvPoint searchLocations);
    public native void detect(CvArr img, CvPoint foundLocations, double hitThreshold, CvSize winStride, CvSize padding, CvPoint searchLocations);
    public native void detectMultiScale(CvArr img, CvRect foundLocations, double hitThreshold, CvSize winStride, CvSize padding, double scale, int groupThreshold);
    public native void detectMultiScale(CvArr img, CvRect foundLocations, DoublePointer foundWeights, double hitThreshold, CvSize winStride, CvSize padding, double scale, double finalThreshold, boolean useMeanshiftGrouping);
    public native void detectMultiScale(CvArr img, CvRect foundLocations, double hitThreshold, CvSize winStride, CvSize padding, double scale, double finalThreshold, boolean useMeanshiftGrouping);
    ...
};

でわかるようにopencv_core.javaIplImageラッパー オブジェクトは次のように拡張されCvArrます。

// javacv/cpp/opencv_core.java:410
public static class IplImage extends CvArr {
    ...
};

したがって、変換を行う必要はありません。

を使用した例を次に示しHOGDescriptor.detectMultiScaleます。

IplImage img = cvLoadImage("image.jpg");
CvRect foundRects = new CvRect(null);
HOGDescriptor hog = new HOGDescriptor(); 
FloatPointer svm = HOGDescriptor.getDefaultPeopleDetector();
hog.setSVMDetector(svm);
hog.detectMultiScale(img, foundRects, 0, cvSize(8,8), cvSize(32,32), 1.05, 2);
于 2013-05-16T11:59:02.623 に答える