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

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

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

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

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

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

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

34
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.06.2012, 01:39
Студворк — интернет-сервис помощи студентам
Размер Image и размер Image->Picture->Bitmap различные размеры
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
17.06.2012, 12:34  [ТС]
image1[] и image2[] генерируются динамически, по мере загрузки изображений.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
static int index=0;
N=index+1;
  OpenPictureDialog1->Execute();
  //TImage newimage;
  image1[index]= new TImage(Form1);
  image1[index]->Parent=Form1;
  image1[index]->AutoSize=true;
  image1[index]->Picture->LoadFromFile(OpenPictureDialog1->FileName);
  image1[index]->Visible=False;
  image2[index]= new TImage(Form1);
  image2[index]->Parent=Form1;
  image2[index]->AutoSize=true;
  image2[index]->Visible=False;
По идее, image2[i] - это некая прямоугольная область скопированная из image1[i], размером с этот самый прямоугольник, поэтому и стоит автосайз.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
17.06.2012, 13:17
Покажи, как объявлены image1 и image2.
Цитата Сообщение от BeerHunter Посмотреть сообщение
По идее, image2[i] - это некая прямоугольная область скопированная из image1[i]
Нет здесь никакого копирования. Есть создание двух независимых наборов TImage.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.06.2012, 14:03
битмап желательно инициализировать предварительно. Хотя бы так...__
C++
1
2
3
4
5
      Image2->Picture->Bitmap->PixelFormat = pf24bit;
      Image2->Picture->Bitmap->Width = Image2->Width ;
      Image2->Picture->Bitmap->Height = Image2->Height ;
      Image2->Picture->Bitmap->Canvas->Brush->Color = clBlack;
      Image2->Picture->Bitmap->Canvas->FillRect(RE);
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
17.06.2012, 16:00  [ТС]
[QUOTE=BRcr;3175857]Покажи, как объявлены image1 и image2.

Нет здесь никакого копирования. Есть создание двух независимых наборов TImage.[/QUOTE
C++
1
image2[0]->Canvas->CopyRect(Rect(0,0,40,40),image1[0]->Canvas,R);
Цитата Сообщение от BeerHunter Посмотреть сообщение
nick42,
Вопрос возник из-за того, что при выполнении вот такой строки:
C++
1
image2[0]->Canvas->CopyRect(Rect(0,0,40,40),image1[0]->Canvas,R);
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
17.06.2012, 17:30
Правильнее работать не с канвой TImage, а с канвой TBitmap. Надежнее это.
И все-таки покажи объявление image1 и image2.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
18.06.2012, 13:47  [ТС]
Пардон, не заметил. =)
C++
1
TImage *image1[10], *image2[10];
Добавлено через 18 часов 21 минуту
Хм, упорно отказывается выполнять CopyRect для:
C++
1
image2[index]->Canvas->CopyRect(R,image1[index]->Canvas,R);
В то время, как
C++
1
Image2->Canvas->CopyRect(R,image1[index]->Canvas,R);
и
C++
1
image2[index]->Picture=image1[index]->Picture;
работают адекватно: 1)Копирует кусок R из image1[] в Image2 и выводит его. 2)Целиком копирует изображение загруженное в image1[] в image2[] и выводит его.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
18.06.2012, 13:50
Размеры Image и Image->Picture->Bitmap в общем случае разные. То, что у вас 100 пкс, наводит на подозрение, что для битмапа установились дефолтовые значения высоты и ширины (105 пкс).
П.С. Когда-то я делал подобное копирование, и все прекрасно работало. Вот строчка из рабочей программы (для "размышления"):
C++
1
2
pazly[j]->Picture->Bitmap->Canvas->CopyRect(Rect(0,0,82,66),
           Image1->Picture->Bitmap->Canvas,sou) ;
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.06.2012, 14:31
C++
1
image2[index]->Picture=image1[index]->Picture;
Этот кусок будет работать как угодно, но не адекватно.
Такие издевательства над указателями на объекты vcl как минимум вызовут утечку памяти, как максимум - access violation при удалении.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
19.06.2012, 17:13  [ТС]
Ладно уж, с этими неприятностями разобрался. Теперь еще хуже: как подсчитать число элементов, загруженных в массив типа TImage?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.06.2012, 17:58
Цитата Сообщение от BeerHunter Посмотреть сообщение
как подсчитать число элементов, загруженных в массив типа TImage?

Не по теме:

Ждем нагоняй за лишний вопрос в теме.:)
Однако, это элементарно. При создании инициализировать массивы нулевыми указателями, потом проверять, что в указателе - адрес или NULL.

C++
1
2
TImage *image1 = {NULL}; // если в классе, то так нельзя; в классе инициализируем циклом в конструкторе
if (image1[3] != NULL) { /*указатель не нулевой*/}

0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.06.2012, 18:16
Цитата Сообщение от BRcr Посмотреть сообщение
Ждем нагоняй за лишний вопрос в теме.
Я до сих пор уверен, что тема обработки нескольких изображений с вопросом подсчета их количества увязана очень тесно, чтобы выносить это в отдельный топик (впрочем, может ТАМ конфеты получают за каждую дополнительную тему...). По моему, анализ каждого индексированного Image (не обязательно индексированного) на равенство NULL может разрешить проблему (индексированного я упомянул из-за удобства осуществления такого анализа в цикле).
1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.06.2012, 18:24
Цитата Сообщение от nick42 Посмотреть сообщение
Я до сих пор уверен, что тема обработки нескольких изображений с вопросом подсчета их количества увязана очень тесно, чтобы выносить это в отдельный топик
Склонен согласиться, но лишь частично. Когда название темы четко отражает суть проблемы в ней, поиском пользоваться во сто крат проще и приятнее. Да и на этом утверждении тут можно столько вопросов увязать, что тема превратится в FAQ по графической части билдера.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.06.2012, 18:29
Ну, не спорю: правильное название темы - это мечта, и не только модераторов. Но ведь не всегда тема, заявленная с правильным, ёмким названием, становится хрестоматийным материалом - хоть в брошюру её "Программирование - это очень просто!". Чаще бывает наоборот: много "воды", невнятных рассуждений, иногда просто ошибочных советов. Ничего не поделать, - форум есть форум, и можно лишь стремиться к тому, чтоб его уровень непрерывно рос.
0
19.06.2012, 18:34

Не по теме:

Верно... только вот именно в этом-то контексте и приобретают свое значение модерация и правила форума - делают мечту ближе, а уровень форума выше... хоть и пинками, хоть и постфактум.:rofl:

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.06.2012, 18:34
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru