0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24

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

06.06.2012, 14:13. Показов 4460. Ответов 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
8489 / 6156 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru