繁体   English   中英

在javacv中将IplImage转换为Mat

[英]Convert IplImage to Mat in javacv

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

你能举例说明如何在 java IplImage转换为Mat吗?

将 IplImage 转换为 Mat 很简单。

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

Mat matImage = new Mat(iplImage);

反之亦然

不要混淆此处记录的官方 OpenCV Java 绑定和没有文档的JavaCV项目。

如果您使用JavaCV ,则无需转换IplImage即可使用HOGDescriptor ,正如您在JavaCV源代码JavaCVHOGDescriptor对象包装器操作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);

有一个方法:

opencv_core.cvarrToMat(iplImage);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM