如何在OpenCV中将BufferedImage转换为Mat?我使用java包装器的OpenCV(而不是JavaCV).由于我是OpenCV的新手,我在理解Mat的工作方式时遇到了一些问题.
我想做这样的事情.(根据Ted W.回复):
BufferedImage image = ImageIO.read(b.getClass().getResource("Lena.png"));
int rows = image.getWidth();
int cols = image.getHeight();
int type = CvType.CV_16UC1;
Mat newMat = new Mat(rows,cols,type);
for(int r=0; r<rows; r++){
for(int c=0; c<cols; c++){
newMat.put(r, c, image.getRGB(r, c));
}
}
Highgui.imwrite("Lena_copy.png",newMat);
Run Code Online (Sandbox Code Playgroud)
这不起作用."Lena_copy.png"只是一张尺寸正确的黑色照片.
我正在尝试训练自己的探测器与OpenCV :: HOGDescriptor一起使用,但我无法使现有的HOGDescriptor与我新训练的SVM一起工作.
我已经为正面和负面训练图像计算了HOG特征,标记了它们并使用CvSVM训练了SVM.我使用的参数是:
CvSVMParams params;
params.svm_type =CvSVM::EPS_SVR;
params.kernel_type = CvSVM::LINEAR;
params.C = 0.01;
params.p = 0.5;
Run Code Online (Sandbox Code Playgroud)
然后我计算支持向量的原始形式,这样我只得到一个向量而不是多个向量,并使用HOGDescriptor.setSVMDetector(向量)设置计算的支持向量;
当我使用CvSVM.predict()时,我能够使用SVM正确地对对象进行分类,但是HOGDescriptor.detect()或detectMultiScale()总是返回许多正匹配,并且不能给出准确的预测.
CvSVM.predict()使用原始支持向量进行分类,因此我计算原始形式的方式可能有问题.
是否有人训练过他们自己的探测器谁能指出我正确的方向?