我在Android中使用JavaCV。
在我的代码,我已经创建了一个对象进行比较的图像对象,并使用(OpenCV的食谱
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类)一ImageComparator。如果我使用SD卡上的文件,比较器正在工作。Android JavaCV从相机创建IplImage以使用ColorHistogram
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时它不起作用。在比较“分数”计算过程中,我得到以下异常。
score = referenceComparator.compare(grayImage)/ imageSize; java.lang.RuntimeException:/home/saudet/android/OpenCV-2.4.2/modules/core/src/convert.cpp:1196:error:(-215)i < src.channels()in function void cvSplit()对于CameraPreview我使用FacePreview中的代码来创建IplImage.But它在grayScale中创建图像。
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一起使用?