Ошибка OpenCV: Неопределенная ошибка [дубликат]

Вы должны использовать строчный вид в xml для вашего настраиваемого макета:

  & lt; view class = "com.test.www.BrushPreview" android: id  = "@ + id / brushview" android: layout_width = "100dip" android: layout_height = "100dip" android: layout_gravity = "center" / & gt;   

(в соответствии с ваша ссылка тоже), и она должна работать.

В противном случае он пытается создать android.view .View экземпляра.

10
задан CVertex 3 August 2011 в 22:36
поделиться

3 ответа

Ваша текущая установка OpenCV не поддерживает формат файла, который вы пытаетесь создать на диске.

Проверьте правильность расширения файла. Если это так, вам придется перекомпилировать OpenCV и добавить поддержку этого формата и, возможно, установить библиотеки, которые вам не хватает.

Это все, что можно сказать без дополнительной информации.

EDIT:

Поскольку мне также не удалось создать приложение, которое использует интерфейс C ++ OpenCV (v2.3 на VS2005), я закончил использование следующего обходного пути: при необходимости преобразуйте типы C ++ в типы C.

Преобразование из IplImage* в cv::Mat довольно прямолинейно:

IplImage* ipl_img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_UNCHANGED);
Mat mat_img(ipl_img);

imshow("window", mat_img);

Преобразование cv::Mat в IplImage* не так очевидно, но это также просто , а трюк - использовать IplImage вместо IplImage*:

IplImage ipl_from_mat((IplImage)mat_img);

cvNamedWindow("window", CV_WINDOW_AUTOSIZE);
// and then pass the memory address of the variable when you need it as IplImage*
cvShowImage("window", &ipl_from_mat); 
9
ответ дан karlphillip 17 August 2018 в 13:32
поделиться
  • 1
    Спасибо @karlphillip - я обновил вопрос, чтобы включить более подробную информацию о моем использовании – CVertex 3 August 2011 в 22:14
  • 2
    Я даже не могу получить imread() для загрузки JPG на WinXP с OpenCV 2.3. ЛОЛ. Я должен решить это, прежде чем перейти к imwrite(). Дайте нам знать ваши выводы. – karlphillip 4 August 2011 в 00:43
  • 3
    В каких библиотеках (libs / dll) вы ссылаетесь на приложение? – CVertex 4 August 2011 в 00:49
  • 4
    Просто 2, которые необходимы для моего глупого проекта imread / imwrite: opencv_highgui230.lib и opencv_core230.lib – karlphillip 4 August 2011 в 01:39
  • 5
    Кстати, если я использую C-интерфейс вместо C ++, код работает. – karlphillip 4 August 2011 в 01:40

Попробуйте

cvSaveImage("test.jpg", &(IplImage(image)));

вместо

imwrite("test.jpg", image);

Это известная ошибка в используемой вами версии.

4
ответ дан Can Guney Aksakalli 17 August 2018 в 13:32
поделиться

Из API OpenCV 2.2 :

Функция imwrite сохраняет изображение в указанный файл. Формат изображения выбирается на основе расширения имени файла, см. Imread для списка расширений. С помощью этой функции можно сохранить только 8-битные (или 16-разрядные в случае PNG, JPEG 2000 и TIFF) одноканальные или трехканальные (с порядком канала BGR). Если формат, глубина или порядок каналов различны, используйте Mat :: convertTo и cvtColor для его преобразования перед сохранением или используйте универсальные функции ввода / вывода XML для сохранения изображения в формате XML или YAML.

У вас может быть больше удачи преобразовать файл в 8 или 16 бит до сохранения.

Однако даже с одноканальными 8-битными файлами у меня были неизвестные ошибки расширения, пытающиеся сохранить файлы jpg или png но обнаружил, что bmp работает.

0
ответ дан Tim MB 17 August 2018 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: