Почему выдаёт ошибку OpenCV & C++ Builder

Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение public_void » 08 июн 2008, 16:41

Выдаёт ошибку во время выполнения. Вроде что-то с форматом цвета связано.
Код: Выделить всё
void TForm1::BubbleContours(Graphics::TBitmap &bmp, Graphics::TBitmap &outputBmp) 

IplImage *image = TBitmapToIplImage(&bmp); 
IplImage* laplace = 0; 
IplImage* colorlaplace = 0; 
IplImage* planes[3] = { 0, 0, 0 }; 
// Laplacian 
if( !laplace ) 

for(int i = 0; i < 3; i++ ) 

planes[i] = cvCreateImage( cvSize(image->width,image->height), 8, 1 ); 

laplace = cvCreateImage( cvSize(image->width,image->height), IPL_DEPTH_16S, 1 ); 
colorlaplace = cvCreateImage( cvSize(image->width,image->height), 8, 3 ); 

cvCvtPixToPlane( image, planes[0], planes[1], planes[2], 0 ); 
for(int i = 0; i < 3; i++ ) 

cvLaplace( planes[i], laplace, 3 ); 
cvConvertScaleAbs( laplace, planes[i], 1, 0 ); 

cvCvtPlaneToPix( planes[0], planes[1], planes[2], 0, colorlaplace ); 
colorlaplace->origin = image->origin; 
// Contours 
IplImage *edge = cvCreateImage( cvSize(image->width,image->height), IPL_DEPTH_8U, 3 ); 
IplImage *convertedImage = cvCreateImage( cvSize(image->width,image->height), IPL_DEPTH_8U, 3 ); 
cvCanny(convertedImage, edge, 50, 200, 3 ); //error here
IplImageToTBitmap(edge, &outputBmp); 
}
public_void
 
Сообщения: 12
Зарегистрирован: 03 апр 2008, 20:21

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение Myp » 09 июн 2008, 09:58

да? как интересно...
а как ты догадался? телепатически? если нет то процитируй плиз текст ошибки сюда :)
ато пока я в отпуске тебе никто не поможет
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение public_void » 09 июн 2008, 19:03

во время выполнения этого алгоритма выдаёт следующее сообщение об ошибке

Unsupported format or combination of formats() in function cvCanny,
D:\User\VP\opecv\cv\src\cvcanny.cpp(262)

Press "Abort" to terminate application.
Press "Retry" to debug (if the app is running under debugger).
Press "Ignore" to continue (this is not safe).
public_void
 
Сообщения: 12
Зарегистрирован: 03 апр 2008, 20:21

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение hudbrog » 09 июн 2008, 19:20

Проверьте, что корректно отрабаывают cvCreateImage и, соответственно, указатели на имейджи не NULL.
И во-вторых, не ясно на чем именно вы собираетесь искать края (что собственно делает cvCanny), если вы ей подсовываете пустую тока что созданную картинку.
Ну и само собой у вас low_threshold стоит больше чем high_threshold, что есть несколько нелогично. Должно бы быть наоборот.
У меня в голове опилки и длинные слова меня только огорчают.
Аватара пользователя
hudbrog
 
Сообщения: 1585
Зарегистрирован: 14 май 2008, 15:49
Откуда: Москва
ФИО: Алексей

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение public_void » 10 июн 2008, 13:20

я пробовал изменить код вот так
Код: Выделить всё
cvCvtPlaneToPix( planes[0], planes[1], planes[2], 0, colorlaplace ); 
colorlaplace->origin = image->origin; 
// Contours 
IplImage *edge = cvCreateImage( cvSize(image->width,image->height), IPL_DEPTH_8U, 3 ); 
cvCanny(colorlaplace, edge, 50, 200, 3 ); //error here
IplImageToTBitmap(edge, &outputBmp); 
}


так же я менял в кэнни местами 50 и 200. Всё равно та же ошибка.
public_void
 
Сообщения: 12
Зарегистрирован: 03 апр 2008, 20:21

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение =DeaD= » 10 июн 2008, 16:25

Думается надо внимательно прочитать какие форматы изображений поддерживает cvCanny и тщательно проверить эти форматы перед передачей изображения в функцию.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение DeBOBAHer » 11 июн 2008, 08:39

To avoid overflow, the function requires 16-bit destination image if the source image is 8-bit. The result can be converted back to 8-bit using cvConvertScale or cvConvertScaleAbs functions. Besides 8-bit images the function can process 32-bit floating-point images. Both source and destination must be single-channel images of equal size or ROI size.

Т.е. надо передавать как входной параметр изображение с одним цветовым каналом. Большинство алгоритмических функций в OpenCV могут работать только с одноканальными изображениями (изображениями в градациях серого).
Аватара пользователя
DeBOBAHer
 
Сообщения: 15
Зарегистрирован: 22 мар 2008, 23:35
Откуда: Санкт-Петербург

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение =DeaD= » 11 июн 2008, 11:42

И не только с 1 каналом, но еще и на вход 8бит, а на выходе должен быть приёмник 16бит, чтобы не было переполнения.
Оба условия, как очевидно, нарушены в приведенном выше программном коде.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение public_void » 11 июн 2008, 13:37

А ка изображение из 3-х канального сконвертить в одноканальное
public_void
 
Сообщения: 12
Зарегистрирован: 03 апр 2008, 20:21

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение =DeaD= » 11 июн 2008, 13:46

public_void писал(а):А ка изображение из 3-х канального сконвертить в одноканальное

Есть такая полезная вещь, как COI (Channel Of Interest), подробнее пример применения, например, тут:
viewtopic.php?p=43041#p43041
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение public_void » 11 июн 2008, 21:10

спасибо, помогло.
public_void
 
Сообщения: 12
Зарегистрирован: 03 апр 2008, 20:21

Re: Почему выдаёт ошибку OpenCV & C++ Builder

Сообщение Snuff1k » 31 май 2012, 13:32

вопрос, пишу #include <highgui.h>, а он мне ошибку [C++ Error] Unit1.cpp(5): E2209 Unable to open include file 'highgui.h', как можно решить ?
Snuff1k
 
Сообщения: 2
Зарегистрирован: 31 май 2012, 13:31


Вернуться в Компьютерное зрение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3