C++ QT моделирование физических процессов

C++ QT

Метод анализа графического изображения

 



Общее о программе

С++ - язык программирования, наиболее популярный в наше время. Отличается очень выскокой функциональностью и большим колличеством различных  SDK (готовая оболочка для программирования). QT - специальные библиотеки и готовая SDK, которые направленны на облегчение разработки приложений. Направлен на разработку утилит, приложений с графическим анализом.

В данной статье я буду говорить не о С++, а лишь об одном из методов решения исследовательских физических задач при использовании С++ QT.

В первую очередь, я бы хотел сказать о том, что когда я начинал изучать этот метод, для меня изначально стояло две задачи: сделать исследовательскую работу по физике и обучиться азам С++(по крайней мере познакомиться с ним). В случае, если для вас не стоит задачи знакомства с С++, то, я настоятельно рекомендую воспользоваться таким языком программирования, как Delphi. Он значтельно легче в совоении и более удобный для разработки простых прикладных проектов.

О каком методе идет речь? Данный метод позволяет анализировать картинку полученную извне по цветам пикселей  и производить расчеты по определенному алгоритму.

Как дополнение к описанию я прилагаю код своей программы, предназначенной для определения размерности двумерного фрактала и комментарии, как переделать его под ряд других задач.

Наиболее интересной из этих задач на мой взгляд является определение расстояния между двумя точками на картинке и масштабирование его при помощи двух других точек, расстояние между которыми известно. Данная схема позволяет расчитать скорость быстро двигающегося объекта заснятого на видеокамеру. Из видеоряда выделяется последовательность кадров и определяется расстояние между двумя последовательными положениями объекта. 

Системные требования

зависят от версии программы C++  для использованной мной С++ QT это

Microsoft 2000/XP/Vista/7, nix'ы, MacOS

512 mb RAM, 64mb Video

Освоение и сложность
Прежде всего нужно отметить, что С++ QT является объектно ориентированной средой программирования. Кто не знает, что это такое, лучше проконсультироватся с кем-то. По крайней мере если ты программировал на Паскале или аналогичных уже устаревших языках, будет разобраться сразу очень сложно.
 

Сложность  С++ QT среди объектно ориентированных языков программирования  первую очередь заключается в том, что из-за огромнй функциональности языка, не сразу разбираешься стурктуре. Однако, в пакете QT встроен очень высокомощный Хелп, в котором описаны от начала до конца все функции. Плюс хелпа - в нем есть все. Как только ты в нем разбираешься, вопрос о функциях библиотеки снимается сразу. Но,  написан он на английском языке и русского на данный моме нтнет и не планируется. Поэтому, я настоятельно рекомендую воспользоваться помощью при начальном освоении, иначе можно запуаться и ничего не понять.
У меня в процессе освоения языка возникала  проблема именно с пониманием структуры Help. На первый взгляд она может показаться странной и непонятной. К ней нужно привыкнуть и понять ее логику. Когда освоишь эту логику, проблемм уже не возникает.
 

Литература
На C++ большое количество книг, можно без проблем найти статьи по основам программам. Литературы на QT тоже не малое колличесвто. Но я не пользовался ей, не понадобилось. Но, стоит учесть, что в пакет QT входит очень удобно написанный Help в котором точно расписаны все классы, процедуры и функции библиотек. Благодаря нему, можно осваивать программу самому сразу после изучения начал и восприятия алгоритма написания, синтаксиса.
Во время освоения, я пользовался помощью двух программистов: Владимира Эдуардовича и Филипьева Алексея. Задавал вопросы, когда они возникали.

 

Принцип работы и моя задача, при исользовании QT

Описание в нескольких словах  этапы работы в QT:
Во время написания программы ты занимаешься двумя задачами: разрабатываешь интерфейс и сам программный код. Разработка интерфейса подразумевает собой использования готовых «заготовок», а программный код полностью зависит от использующего  библиотеки. Благодаря готовым функциям, можно без особых усилий оперировать с интерфейсом, однако алгоритм пишеться с нуля самим пользователем и сложность которого зависит от поставлено задачи.

Изначально ты создаешь неокторый интерфейс программы, прописываешь общие процедуры, которые будутп роисходить у тебя в программе. К примеру: событие при нажатии кнопки "К". Создаешь меню, область. После ты выбираешь, как именно будет представляться твоя информация, и в зависимости от этого, выбираешь виджет.

Следующим шагом будет связь интерфейса с функциями представления изображения. Т.е. создать кнопку подгрузки изображения.

Далее пишем программный код. Т.е. анализируем картинку. Мы анализировали соотвестия цвета пиксела заданному значению RGB.

После чего мы экспортируем данные через специальную функцию, о которой написано в Helper'e.
 

Моя задача

У меня была задача проанализировать картинку попиксельно. Взяв за основу готовый исходник (чужую программу, которая расчитывала расстояние между кольцами годовово  прироста древесины по фотографии спила) с готовым интерфейсом и начальным набором функций, содержащих в себе експорт документа, подгрузку изображений и имеющий несоклько виджетов, позволяющих менять содержимое ячеек, я начал разрабатывать свою программу. Сначала я внедрил запуск функции по нажатию кнопки, потом я постарался разобраться в том, каким образом я буду оценивать цвет пиксела. Было решено смотреть значение RGB и если числовое значение цвета не различается больше чем на 10 пунктов, то моя процедура возвращает TRUE в противном случае FALSE. После чего я написал цикл, в котором я буду перебирать все точки на подгружаемой картинке и к каждую точку я оценивал моей процедурой. Задача цикла была разделить картинку на условные "квадраты" и уже отдельно квадратыразбить на точки и уже точки оценивать. Если в квадрате процентное соотношение точек превышает или равно заданому значению на форуме через виджет, то всему квадрату присваевается значение TRUE. После окончания цикла, идет подсчет всех TRUE и заносится в массив данные: размер одного квадратика и колличество квадратиков TRUE. После чего, значение можно вывести в блокнотный файл уже написанной функцией экпорта. Далее уже идут расчетные действия в Excel.

Вернуться. 


Урок

Урок вы можете скачать по ссылке ниже.

feedback
Loading