Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
1

Загрузка и обработка нескольких изображений

06.06.2012, 14:13. Просмотров 2863. Ответов 34
Метки нет (Все метки)

Добрый день. Имеется необходимость загрузить серию изображений(одного размера) для статистической обработки. То есть, загружается вся последовательность целиком, но в форму выводится, например, только первый кадр, на нем выделяется рабочая область(например: хотим посчитать количество черных пикселей на всех кадрах) далее производится некий расчет, и результат выводится в виде графика распределения/гистограммы. Расчетный модуль уже готов, но приспособлен он только для работы с единственным изображением, а не целой серией. Подскажите, пожалуйста, как реализовать загрузку множества изображений(10 например)в память, и распространить рабочую область(прямоугольник) с первого кадра, на остальные 9. Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2012, 14:13
Ответы с готовыми решениями:

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

Обработка изображений
Здравствуйте. В С не программировал никогда. Необходимо реализовать алгоритм обработки изображения...

Обработка изображений
Здравствуйте! Помогите пожалуйста. Нужно в какой-либо массив загрузить до 100 изображений, каждое...

Загрузка jpg изображений из dll
Здравствуйте. Я понимаю, что темы с таким названием уже существуют, но ответа в них я так и не...

34
Практикантроп
4578 / 2524 / 465
Регистрация: 23.09.2011
Сообщений: 5,420
06.06.2012, 15:08 2
Если картинки одного размера, то сразу стоит посмотреть в сторону компонента TImageList и работы с ним.
0
4029 / 2319 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.06.2012, 18:00 3
Или элементарный массив TBitmap. Или запихнуть их в любой stl-контейнер по вкусу. Много способов, в общем-то.
Цитата Сообщение от BeerHunter Посмотреть сообщение
распространить рабочую область(прямоугольник) с первого кадра, на остальные 9
Запомнить ее в TRect.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
12.06.2012, 18:39  [ТС] 4
Пытаюсь освоить ImageList. Насколько я понял, он ориентирован на работу с заранее загруженными в него изображениями. Возможно ли вывести диалог загрузки изображений непосредственно в приложение, чтобы пользователь сам мог загружать/удалять картинки?
0
4029 / 2319 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.06.2012, 19:35 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
try {
    Graphics::TBitmap *bmp = new Graphics::TBitmap();
    ExtDlgs::TOpenPictureDialog *dlg = new ExtDlgs::TOpenPictureDialog(Form1);
    
    if( dlg->Execute() ) {
        bmp->LoadFromFile( dlg->FileName );
        image_list->Add( bmp, NULL );
    }
}
finally {
    delete bmp;
    delete dlg;
}
0
Эксперт С++
8325 / 6077 / 604
Регистрация: 10.12.2010
Сообщений: 28,212
Записей в блоге: 27
12.06.2012, 19:38 6
Ну для этого есть диалоги...
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
12.06.2012, 20:06  [ТС] 7
Так вот вопрос в том и есть, как этот диалог вызвать из основной программы. Например вызов диалога загрузки одного изображения в Image1 реализован вот так:
C++ (Qt)
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenPictureDialog1->Execute();
 
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
 
}
0
4029 / 2319 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.06.2012, 20:13 8
Цитата Сообщение от BeerHunter Посмотреть сообщение
как этот диалог вызвать из основной программы
Вызвать его метод Execute().
Только сдается мне, что спрашиваешь ты не то, что хочешь на самом деле узнать...
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
12.06.2012, 21:08  [ТС] 9
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
ImageList1->Execute();
 
 
}
[C++ Error] Unit1.cpp(30): E2316 'Execute' is not a member of 'TImageList'

Отчасти, да, спрашиваю не совсем то, что хотел, просто как-то совестно сразу все свои проблемы на вас вываливать. А так, вроде и совесть чиста и самому будет о чем подумать.
0
4029 / 2319 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.06.2012, 21:28 10
ууу... темный лес
Смотри выше, там пример, как в imagelist картинку через диалог засунуть...
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
14.06.2012, 10:52  [ТС] 11
Получилось примитивно, но вроде работает:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenPictureDialog1->Execute();
Image2->Picture->LoadFromFile(OpenPictureDialog1->FileName);
ImageList1->Add(Image2->Picture->Bitmap,NULL);
ImageList1->GetBitmap(0, Image1->Picture->Bitmap);
 
}
Здесь, по нажатию кнопочки открывается диалог загрузки изображения, и оно загружается в Image2(невидимый - временный). Затем уже добавляется в ImageList1, и выводится уже в Image1. Отображается только 0(первый) элемент ImageList, с которым и предполагается дальнейшая работа. Теперь: если прикручивать функцию обработки(выделение прямоугольной области, ее копирование, обесцвечивание, вставку в Image3), то как её распространить на все объекты загруженные в ImageList? Спасибо.
0
4029 / 2319 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
14.06.2012, 11:50 12
Циклом распространить, как еще-то...
Область сохраняем в TRect и по ней в цикле делаем с картинками, что потребно.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
15.06.2012, 15:42  [ТС] 13
Если у изображения стоит свойство Visible=False; и к нему применить метод CopyRect(), то скопируется ли что-нибудь с такого объекта?
0
Практикантроп
4578 / 2524 / 465
Регистрация: 23.09.2011
Сообщений: 5,420
15.06.2012, 15:52 14
с невидимой картинкой можно работать как и с видимой (и почему бы сперва не попробовать?...)
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
15.06.2012, 17:19  [ТС] 15
nick42,
Вопрос возник из-за того, что при выполнении вот такой строки:
C++
1
image2[0]->Canvas->CopyRect(Rect(0,0,40,40),image1[0]->Canvas,R);
Ни шиша, извиняюсь, не происходит. ОДНАКО, если выполнить
C++
1
image2[0]->Picture=image1[0]->Picture;
картинка скопируется целиком нормально.
0
Эксперт С++
8325 / 6077 / 604
Регистрация: 10.12.2010
Сообщений: 28,212
Записей в блоге: 27
15.06.2012, 17:49 16
C++
1
image2[0]->Picture=image1[0]->Picture;
Это не копирование это присвоение указателей так нельзя делать, это не даст тот результат
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
15.06.2012, 17:54  [ТС] 17
Avazart,
Согласен, но вопрос все-таки, в том, почему не работает строка с CopyRect? R(0,0,20,20)
0
Эксперт С++
8325 / 6077 / 604
Регистрация: 10.12.2010
Сообщений: 28,212
Записей в блоге: 27
15.06.2012, 18:31 18
Скорее всего вы размеры неправильно указали в TRect либо не позоботились об увеличениии размеров Image->Picture->Bitmap
0
Практикантроп
4578 / 2524 / 465
Регистрация: 23.09.2011
Сообщений: 5,420
15.06.2012, 19:19 19
Цитата Сообщение от BeerHunter Посмотреть сообщение
image2[0]->Canvas->CopyRect(Rect(0,0,40,40),image1[0]->Canvas,R);
Ни шиша, извиняюсь, не происходит.
А Image1[0], случайно, не JPG или GIF (происхождением)?...
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
16.06.2012, 01:37  [ТС] 20
Avazart, Размер image2[] - 577*435

nick42,
Исключительно .BMP
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2012, 01:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обработка .bmp изображений
Помогите пожалуйста с програмкой до этого делал в маткаде) а сейчас надо в билдере по тихоньку...

OpenCV/C++ обработка изображений
В общем задача следующая, есть изображение(бинарное), подсчитать кол-во объектов т.е изначально...

Загрузка изображений через Indy + немного оптимизации
Я разобрался как используя Indy авторизовываться на файлообменниках :) Теперь мне интересно как...

Обработка изображений - стандартные эффекты фотошопа
Подскажите пожалуйста какую нибудь библиотеку на C\C++ или даже C# с помощью которой можно было бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.