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/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 を作成しているときに機能しません。比較「スコア」の計算中に次の例外が発生します。
スコア = 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]);
}
}
ImageComparator で使用するためにカメラからカラー IplImage を作成する方法は?