2013-05-16 54 views
2

我需要帮助将我的IplImage转换为Mat。我想为我的图像计算HOGDescriptor,然后用SVM对其进行分类,但“计算”需要Mat类型。将IplImage转换为javacv中的Mat

你可以举一些如何在java中将IplImage转换为Mat的例子吗?

+0

转换的IplImage到BufferedImage的,那么我认为API将允许你做出像出垫 – anshulkatta

+0

的非常感谢你! – user2389417

回答

2

请不要混淆和JavaCV项目没有文档的official OpenCV Java binding

如果您使用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到太简单。

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

Mat matImage = new Mat(iplImage); 

反之亦然

0

有一个方法是:

opencv_core.cvarrToMat(iplImage);