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

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

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

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

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

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

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

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

34
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.06.2012, 01:39 21
Author24 — интернет-сервис помощи студентам
Размер Image и размер Image->Picture->Bitmap различные размеры
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
17.06.2012, 12:34  [ТС] 22
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
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
17.06.2012, 13:17 23
Покажи, как объявлены image1 и image2.
Цитата Сообщение от BeerHunter Посмотреть сообщение
По идее, image2[i] - это некая прямоугольная область скопированная из image1[i]
Нет здесь никакого копирования. Есть создание двух независимых наборов TImage.
0
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
17.06.2012, 14:03 24
битмап желательно инициализировать предварительно. Хотя бы так...__
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  [ТС] 25
[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
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
17.06.2012, 17:30 26
Правильнее работать не с канвой TImage, а с канвой TBitmap. Надежнее это.
И все-таки покажи объявление image1 и image2.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
18.06.2012, 13:47  [ТС] 27
Пардон, не заметил. =)
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
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
18.06.2012, 13:50 28
Размеры 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
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.06.2012, 14:31 29
C++
1
image2[index]->Picture=image1[index]->Picture;
Этот кусок будет работать как угодно, но не адекватно.
Такие издевательства над указателями на объекты vcl как минимум вызовут утечку памяти, как максимум - access violation при удалении.
0
0 / 0 / 0
Регистрация: 04.04.2012
Сообщений: 24
19.06.2012, 17:13  [ТС] 30
Ладно уж, с этими неприятностями разобрался. Теперь еще хуже: как подсчитать число элементов, загруженных в массив типа TImage?
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
19.06.2012, 17:58 31
Цитата Сообщение от BeerHunter Посмотреть сообщение
как подсчитать число элементов, загруженных в массив типа TImage?

Не по теме:

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

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

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

Не по теме:

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

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2012, 18:34

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru