我在 Android 中使用 JavaCV。
在我的代码中,我创建了一个 ImageComparator(OpenCV CookBook 类
http://code.google.com/p/javacv/source/browse/OpenCV2_Cookbook/src/opencv2_cookbook/chapter04/ImageComparator.scala?repo=examples http://code.google.com/p/javacv/source/browse/OpenCV2_Cookbook/src/opencv2_cookbook/chapter04/ImageComparator.scala?repo=examples
http:// /code.google.com/p/javacv/wiki/OpenCV2_Cookbook_Examples_Chapter_4)对象并使用该对象来比较图像。如果我使用 SD 卡中的文件,则比较器正在工作。
File referenceImageFile = new File(absPath1); // Read an image.
IplImage reference = Util.loadOrExit(referenceImageFile,CV_LOAD_IMAGE_COLOR);
comparator = new ImageComparator(reference);
comparator = new ImageComparator(reference);
但是从相机预览中,当我创建 IplImage 时它不起作用。在比较“分数”计算期间,我收到以下异常。
score = referenceComparator.compare(grayImage) / imageSize; java.lang.RuntimeException: /home/saudet/android/OpenCV-2.4.2/modules/core/src/convert.cpp:1196: 错误: (-215) i < src.channels() in function void cvSplit(const无效*,无效*,无效*,无效*,无效*)
对于 CameraPreview,我使用 FacePreview 中的代码来创建 IplImage。但它以灰度创建图像。
int f = SUBSAMPLING_FACTOR;
if (grayImage == null || grayImage.width() != width / f
|| grayImage.height() != height / f) {
grayImage = IplImage.create(width / f, height / f, IPL_DEPTH_8U, 1);
}
int imageWidth = grayImage.width();
int imageHeight = grayImage.height();
int dataStride = f * width;
int imageStride = grayImage.widthStep();
ByteBuffer imageBuffer = grayImage.getByteBuffer();
for (int y = 0; y < imageHeight; y++) {
int dataLine = y * dataStride;
int imageLine = y * imageStride;
for (int x = 0; x < imageWidth; x++) {
imageBuffer.put(imageLine + x, data[dataLine + f * x]);
}
}
如何从相机创建 Color IplImage 以与 ImageComparator 一起使用?