roboforum.ru

Технический форум по робототехнике.

Почему выдаёт ошибку 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); 
}

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

Myp » 09 июн 2008, 09:58

да? как интересно...
а как ты догадался? телепатически? если нет то процитируй плиз текст ошибки сюда :)
ато пока я в отпуске тебе никто не поможет

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).

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

hudbrog » 09 июн 2008, 19:20

Проверьте, что корректно отрабаывают cvCreateImage и, соответственно, указатели на имейджи не NULL.
И во-вторых, не ясно на чем именно вы собираетесь искать края (что собственно делает cvCanny), если вы ей подсовываете пустую тока что созданную картинку.
Ну и само собой у вас low_threshold стоит больше чем high_threshold, что есть несколько нелогично. Должно бы быть наоборот.

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. Всё равно та же ошибка.

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

=DeaD= » 10 июн 2008, 16:25

Думается надо внимательно прочитать какие форматы изображений поддерживает cvCanny и тщательно проверить эти форматы перед передачей изображения в функцию.

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 могут работать только с одноканальными изображениями (изображениями в градациях серого).

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

=DeaD= » 11 июн 2008, 11:42

И не только с 1 каналом, но еще и на вход 8бит, а на выходе должен быть приёмник 16бит, чтобы не было переполнения.
Оба условия, как очевидно, нарушены в приведенном выше программном коде.

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

public_void » 11 июн 2008, 13:37

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

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

=DeaD= » 11 июн 2008, 13:46

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

Есть такая полезная вещь, как COI (Channel Of Interest), подробнее пример применения, например, тут:
viewtopic.php?p=43041#p43041

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

public_void » 11 июн 2008, 21:10

спасибо, помогло.

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', как можно решить ?


Rambler\'s Top100 Mail.ru counter