Перейти к содержимому
Compvision.ru
overlinder

TImage & no CV_WINDOW_AUTOSIZE

Recommended Posts

Как вывести IplImage на компоненту TImage в билдер?

как вывести IplImage в окно с любым размером, а не CV_WINDOW_AUTOSIZE?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Как вывести IplImage на компоненту TImage в билдер?

как вывести IplImage в окно с любым размером, а не CV_WINDOW_AUTOSIZE?

Здесь есть пример вывода на любой оконный компонент, зная его Handle: http://www.compvision.ru/forum/index.php?showtopic=2

Там-же есть такой кусок:

//*********************************************************

// Если не нужно подгонять размер кадра - это можно стереть

// Выделяем память под копию кадра

if( !frame_copy )

frame_copy = cvCreateImage( cvSize(352,288),

IPL_DEPTH_8U, frame->nChannels );

// Масштабируем под заданный размер

cvResize( frame, frame_copy, CV_INTER_LINEAR );

// Если не нужно подгонять размер кадра - это можно стереть

//*********************************************************

Где 352 и 288 и есть размер получаемого кадра(желаемый размер окна) который можно вывести стандартным способом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Каким образом хранится марица картинки в IplImage->imageData?

хочу вывести построчно на TImage:

IplImage *src_image = 0;

char *image_line, *image_data;

int h=Image2->Picture->Height;

int w=Image2->Picture->Width;

image_data=src_image->imageData;

for (int i=0;i!=h;++i)

{

image_line=(char *)Image2->Picture->Bitmap->ScanLine;

for(int j=0;j!=w;++j)

image_line[j]=image_data[i*w+j];

}

Image2->Refresh();

выводятся горизонтальные полоски

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Каким образом хранится марица картинки в IplImage->imageData?

хочу вывести построчно на TImage:

IplImage *src_image = 0;

char *image_line, *image_data;

int h=Image2->Picture->Height;

int w=Image2->Picture->Width;

image_data=src_image->imageData;

for (int i=0;i!=h;++i)

{

image_line=(char *)Image2->Picture->Bitmap->ScanLine;

for(int j=0;j!=w;++j)

image_line[j]=image_data[i*w+j];

}

Image2->Refresh();

выводятся горизонтальные полоски

Если три канала, то байты B,G,R,B,G,R... и строки вверх ногами относительно BMP ;).

Если один (серое), то обычно, но тогда:

unsigned char* image_data;

// где-то раньше должно быть src_image= cvCreateImage( cvSize(width,height),IPL_DEPTH_8U,3);

// *src_image не должен быть 0

cvGetRawData(src_image, (uchar**)&image_data);

C=image_data[i*w+j];

Bitmap->ScanLine=C;

Bitmap->ScanLine[i+1]=C;

Bitmap->ScanLine[i+2]=C;

i+=3;

И еще ширина изображения в байтах равна img->widthStep, а не img->width*3, это так, для инфы.

Когда ширина изображения кратна 8 то img->widthStep=img->width*3, а если нет тогда не равно.

Вот тема была тут: http://www.compvision.ru/forum/index.php?showtopic=121

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×