2013-12-04 2 views
0

Я пытаюсь загрузить изображения в Mat в openCV для Android для распознавания лиц.openCV для распознавания лица android показывает ошибку «mat not continu»

Изображения в формате JPEG в формате размером 640 х 480.

Я использую Eclipse, и эти коды в .cpp файле.

Это мои коды.

while (getline(file, line)) { 
     stringstream liness(line); 
     getline(liness, path, ','); 
     getline(liness, classlabel); 
     if(!path.empty() && !classlabel.empty()) { 

      images.push_back(imread(path, 0)); 
      labels.push_back(atoi(classlabel.c_str())); 

     } 
    } 

Однако я получаю ошибку о том, что «Матрица не является непрерывной, поэтому его количество строк не может быть изменено в функции резюме :: Mat резюме: Mat: перекроить (Int, Int) сопзИ»

Я попытался с помощью раствора в OpenCV 2.0 C++ API using imshow: returns unhandled exception and "bad-flag"

но это в Visual Studio.

Любая помощь была бы принята с благодарностью.

Конвертация изображения с предварительного просмотра камеры.

Изображение преобразуется в оттенки серого из данных предварительного просмотра камеры.

Mat matRgb = new Mat(); 

Imgproc.cvtColor(matYuv, matRgb, Imgproc.COLOR_YUV420sp2RGB, 4); 

try{ 
Mat matGray = new Mat(); 
Imgproc.cvtColor(matRgb, matGray, Imgproc.COLOR_RGB2GRAY, 0); 
resultBitmap = Bitmap.createBitmap(640, 480, Bitmap.Config.ARGB_8888); 
Utils.matToBitmap(matGray, resultBitmap); 

Сохранение изображения.

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmFace[0].compress(Bitmap.CompressFormat.JPEG, 100, stream); 
byte[] flippedImageByteArray = stream.toByteArray(); 
+0

Вы уверены, что ошибка была вызвана вашим кодом, вставленным выше? И этот [ответ] (http://stackoverflow.com/que stions/11606737/open-cv-fisherfaces) разработчиком может оказаться полезным. –

ответ

2

Ошибка «Мать не непрерывная» вовсе не связана с имеющейся у вас ссылкой.

Если вы пытаетесь ловить рыбу или собственные поверхности, изображения должны быть «сплющены» в одну строку для pca. это невозможно, если данные имеют «пробелы» или были дополнены, чтобы сделать размер строки кратным 4. Некоторые редакторы изображений делают это с вашими данными.

также, имхо ваши изображения на слишком большой (PCA работает лучше всего, когда это почти квадратичная, т.е. размер строки (num_pixels) похож на colsize (NUM_IMAGES).

поэтому мое предложение было бы, чтобы измените размеры изображений поезда (а также тестовые изображения позже) примерно на 100x100, при загрузке их также будет достигнут непрерывный блок данных.

(и опять же, избегайте jpegs для чего-либо, связанного с обработкой изображений, слишком много сжатия artefacts!)

+0

Thx @berak для вас ответ. Я попробую ваше предложение. Я добавил коды для моего преобразования изображения с предварительного просмотра камеры в оттенки серого и сохранения его для дальнейшего уточнения. – Jack

+0

Yeap, вы правы. Изменение размера изображений на меньший размер (100 х 100). Кроме того, я также узнал об этом событии, хотя я сохранил изображения в оттенках серого в формате JPEG, мне пришлось перезапустить cvCvtColor, чтобы снова изменить JPEG на оттенки серого, прежде чем использовать их для распознавания лиц в openCV. Снова thx. – Jack

Смежные вопросы