2013-05-16 4 views
2

Мне нужна помощь в преобразовании моего IplImage в Mat. Я хочу вычислить HOGDescriptor для моего изображения, а затем классифицировать его с помощью SVM, но для «вычисления» требуется Mat.Convert IplImage to Mat in javacv

Можете привести пример того, как преобразовать IplImage в Mat в java?

+0

конвертировать IplImage в BufferedImage, то я думаю, что API позволит сделать изображение из Мат – anshulkatta

+0

Спасибо большое! – user2389417

ответ

2

Не путайте official OpenCV Java binding с документами here и проектом JavaCV, у которого нет документации.

Если вы используете JavaCV, вам не нужно конвертировать IplImage для того, чтобы использовать HOGDescriptor, как вы можете видеть в JavaCV source, то HOGDescriptor объект обертка манипулирует CvArr объекты:

// 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.java, объект IplImage обертка простирается 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); 
+0

Большое спасибо за ваше внимание и быстрый ответ! – user2389417

1

Преобразование IplImage в Mat прост.

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

Mat matImage = new Mat(iplImage); 

наоборот

0

Там же метод, что:

opencv_core.cvarrToMat(iplImage); 
Смежные вопросы