OpenCv 3.1 - Java 中给定矩阵的错误形状
Wrong Shapes for Given Matrices in OpenCv 3.1 - Java
我已经训练了人脸识别器,所有图像的大小都相同,并将灰度图像传递给预测器。但我面临这个错误
OpenCV 错误:错误的参数(给定矩阵的形状错误。是大小(src( = (1,150544(, size(W( = (37636,5(。在 subspaceProject 中,文件/home/********/opencv/modules/core/src/lda.cpp,第 182 行
这是代码
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String trainingDir = "res/";
File root = new File(trainingDir);
FilenameFilter imgFilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
name = name.toLowerCase();
return name.endsWith(".jpg") || name.endsWith(".pgm") || name.endsWith(".png");
}
};
File[] imageFiles = root.listFiles(imgFilter);
ArrayList <Mat> images = new ArrayList(imageFiles.length);
Mat labels = new Mat(imageFiles.length,1,CvType.CV_32SC1);
int[][] labelsBuffer = new int[imageFiles.length][imageFiles.length];
int counter =0;
for(File image: imageFiles){
Mat img = Imgcodecs.imread(image.getAbsolutePath(),Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
int label = Integer.parseInt(image.getName().split("\.")[2]);
//images.add(label, img);
images.add(img);
counter++;
}
FaceRecognizer faceRecognizer = Face.createEigenFaceRecognizer();
Mat temp = new Mat();
faceRecognizer.train(images, labels);
CascadeClassifier cascadeFaceClassifier = new CascadeClassifier(
"haarcascade_frontalface_default.xml");
VideoCapture videoDevice = new VideoCapture();
videoDevice.open(0);
int x = 0;
if (videoDevice.isOpened()) {
while (true) {
Mat frameCapture = new Mat();
videoDevice.read(frameCapture);
MatOfRect faces = new MatOfRect();
cascadeFaceClassifier.detectMultiScale(frameCapture, faces, 2.0, 5, 0,new Size(),new Size());
for (Rect rect : faces.toArray()) {
Mat resizedCapture = new Mat(frameCapture,rect);
Imgproc.cvtColor(resizedCapture, resizedCapture, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
Size imageSize = new Size(194,194);
Imgproc.resize(resizedCapture,resizedCapture , imageSize);
System.out.println(images.get(0).rows());
System.out.println(resizedCapture.rows());
System.out.println(images.get(0).cols());
System.out.println(resizedCapture.cols());
try{
x = faceRecognizer.predict_label(resizedCapture);
}catch(Exception e){
System.out.println(e.getMessage());
}
x++;
Imgproc.putText(frameCapture, "Face"+x, new Point(rect.x,rect.y-5), 1, 2, new Scalar(0,0,255));
Imgproc.rectangle(frameCapture, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),new Scalar(0, 100, 0),3);
}
PushImage(ConvertMat2Image(frameCapture));
//System.out.println(String.format("FACES = %s EYES = %s detected.", faces.toArray().length,eyes.toArray().length,nose.toArray().length));
}
} else {
System.out.println("Video Device Not Working");
return;
}
}
private static BufferedImage ConvertMat2Image(Mat matImage) {
MatOfByte matOfByte = new MatOfByte();
Imgcodecs.imencode(".jpg", matImage, matOfByte);
byte[] byteArray = matOfByte.toArray();
BufferedImage img = null;
try {
InputStream in = new ByteArrayInputStream(byteArray);
img = ImageIO.read(in);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return img;
}
public static void PencereHazirla() {
frame = new JFrame();
frame.setLayout(new FlowLayout());
frame.setSize(700, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void PushImage(Image img2) {
if (frame == null)
PencereHazirla();
if (lbl != null)
frame.remove(lbl);
icon = new ImageIcon(img2);
lbl = new JLabel();
lbl.setIcon(icon);
frame.add(lbl);
frame.revalidate();
}
}
我正在尝试Image.cvtColor并使用Imagecodecs转换为灰度增加了4倍。对此的解决方案是
Imgproc.cvtColor(resizedCapture, resizedCapture, Imgproc.COLOR_BGR2GRAY);
在opencv社区给出的答案
相关文章:
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 为什么 if 语句在 Java 中"if(1)"给出错误,但在C++中成立?
- 使用本机 JNI 静态方法实现C++ Java 运行时错误
- Java JNI GDAL 本机库在重新部署为 Web 应用程序时出现类加载器错误
- Java 本机访问代码错误:"Invalid memory access"
- 编译 Java TD 客户端时出现构建错误
- OpenCv 3.1 - Java 中给定矩阵的错误形状
- 为什么日食总是发生错误"An internal error occurred during: "通知选择侦听器". java.lang.StackOverflowError"
- 在使用 bazel 构建一个简单的应用程序时,得到错误在 '/usr/lib/java/jdk1.8.0_74/bin/java' 找不到 java
- JNI 代码返回字符串,但得到错误 java.lang.UnsatisfiedLinkError: com.packag
- 使用 SWIG 将 c++ 包装到 java 不满意的链接错误: HeaderJNI.new_Test()J.
- JVM在libjvm.so中经常因Sigsegv Java致命错误而崩溃
- 从WordCount Hadoop示例调用Helloworld Jni函数,给出错误Java.lang.unsatisf
- 浮点决定论 - Java做出错误的输出,C++正确的
- 在Android Java应用程序中使用OpenCV Mat.OpenCV Mat出现NoClassDefFound错误
- 无法在 Mac OS X 上分配内存错误 - java(xx,xx) malloc: *** mmap(size=XX)
- Java 中的".class"错误
- MySQL 连接器错误,将代码从 Java 转换为 C++
- Java 运行时环境检测到致命错误:Java 中的 OpenCV 椭圆检测
- 代码的错误答案是在Java Camel案件和C 下划线标识符之间转换的错误答案