Я использую JavaCV в Android.
В своем коде я создал 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/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);
Но из Camera Preview, когда я создаю IplImage, он не работает. Я получаю следующее исключение во время вычисления "оценки" сравнения.
оценка = referenceComparator.compare(grayImage) / размер изображения; java.lang.RuntimeException: /home/saude/android/OpenCV-2.4.2/modules/core/src/convert.cpp:1196: ошибка: (-215) i ‹ src.channels() в функции 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?