我需要帮助将我的IplImage
转换为Mat
。我想为我的图像计算HOGDescriptor
,然后用SVM对其进行分类,但“计算”需要Mat
类型。将IplImage转换为javacv中的Mat
你可以举一些如何在java中将IplImage
转换为Mat
的例子吗?
我需要帮助将我的IplImage
转换为Mat
。我想为我的图像计算HOGDescriptor
,然后用SVM对其进行分类,但“计算”需要Mat
类型。将IplImage转换为javacv中的Mat
你可以举一些如何在java中将IplImage
转换为Mat
的例子吗?
请不要混淆和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);
非常感谢您的关注和快速回复! – user2389417
转换的IplImage到太简单。
IplImage iplImage= cvLoadImage("image.png");
Mat matImage = new Mat(iplImage);
反之亦然
有一个方法是:
opencv_core.cvarrToMat(iplImage);
转换的IplImage到BufferedImage的,那么我认为API将允许你做出像出垫 – anshulkatta
的非常感谢你! – user2389417