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

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

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

Студворк — интернет-сервис помощи студентам
Добрый день. Имеется необходимость загрузить серию изображений(одного размера) для статистической обработки. То есть, загружается вся последовательность целиком, но в форму выводится, например, только первый кадр, на нем выделяется рабочая область(например: хотим посчитать количество черных пикселей на всех кадрах) далее производится некий расчет, и результат выводится в виде графика распределения/гистограммы. Расчетный модуль уже готов, но приспособлен он только для работы с единственным изображением, а не целой серией. Подскажите, пожалуйста, как реализовать загрузку множества изображений(10 например)в память, и распространить рабочую область(прямоугольник) с первого кадра, на остальные 9. Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2012, 14:13
Ответы с готовыми решениями:

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

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

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

34
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
06.06.2012, 15:08
Если картинки одного размера, то сразу стоит посмотреть в сторону компонента TImageList и работы с ним.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.06.2012, 18:00
Или элементарный массив TBitmap. Или запихнуть их в любой stl-контейнер по вкусу. Много способов, в общем-то.
Цитата Сообщение от BeerHunter Посмотреть сообщение
распространить рабочую область(прямоугольник) с первого кадра, на остальные 9
Запомнить ее в TRect.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
12.06.2012, 18:39  [ТС]
Пытаюсь освоить ImageList. Насколько я понял, он ориентирован на работу с заранее загруженными в него изображениями. Возможно ли вывести диалог загрузки изображений непосредственно в приложение, чтобы пользователь сам мог загружать/удалять картинки?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.06.2012, 19:35
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
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.06.2012, 19:38
Ну для этого есть диалоги...
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
12.06.2012, 20:06  [ТС]
Так вот вопрос в том и есть, как этот диалог вызвать из основной программы. Например вызов диалога загрузки одного изображения в Image1 реализован вот так:
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
OpenPictureDialog1->Execute();
 
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
 
}
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.06.2012, 20:13
Цитата Сообщение от BeerHunter Посмотреть сообщение
как этот диалог вызвать из основной программы
Вызвать его метод Execute().
Только сдается мне, что спрашиваешь ты не то, что хочешь на самом деле узнать...
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
12.06.2012, 21:08  [ТС]
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
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.06.2012, 21:28
ууу... темный лес
Смотри выше, там пример, как в imagelist картинку через диалог засунуть...
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
14.06.2012, 10:52  [ТС]
Получилось примитивно, но вроде работает:
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
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
14.06.2012, 11:50
Циклом распространить, как еще-то...
Область сохраняем в TRect и по ней в цикле делаем с картинками, что потребно.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
15.06.2012, 15:42  [ТС]
Если у изображения стоит свойство Visible=False; и к нему применить метод CopyRect(), то скопируется ли что-нибудь с такого объекта?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.06.2012, 15:52
с невидимой картинкой можно работать как и с видимой (и почему бы сперва не попробовать?...)
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
15.06.2012, 17:19  [ТС]
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
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.06.2012, 17:49
C++
1
image2[0]->Picture=image1[0]->Picture;
Это не копирование это присвоение указателей так нельзя делать, это не даст тот результат
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
15.06.2012, 17:54  [ТС]
Avazart,
Согласен, но вопрос все-таки, в том, почему не работает строка с CopyRect? R(0,0,20,20)
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.06.2012, 18:31
Скорее всего вы размеры неправильно указали в TRect либо не позоботились об увеличениии размеров Image->Picture->Bitmap
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.06.2012, 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  [ТС]
Avazart, Размер image2[] - 577*435

nick42,
Исключительно .BMP
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.06.2012, 01:37
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru