Форум программистов, компьютерный форум CyberForum.ru

Посоветуйте как доработать код "Метод жука" для нахождения всех объектов на картинке - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создать массив структур на c++ http://www.cyberforum.ru/cpp-beginners/thread125051.html
Здраствуйте. Подскажите как развязать задание, которое задали. С + + учим 2 месяца, и мне трудно развязать его самой, а очень нужно. Заранее благодарна всем. Задание в отдельном файле zadacha.rar
C++ HGE: Евент нажатия кнопки мыши Перерыл пол Яндекса, ничего хорошего не нашел. В общем вопрос касаемый бибилиотеки HGE. Мне нужно чтобы по нажатию мыши происходило какое-либо действие, именно по нажатию на HGE форму, а не на Form1. Нашел вот, что можно решить проблему через этот оператор: Input_GetKeyState(HGEK_LBUTTON) Ничего не получается. Он просто не реагирует. Жмешь кнопку а он как был так и остался. Проверял... http://www.cyberforum.ru/cpp-beginners/thread125037.html
C++ текстовые файлы
В заданном предложении указать слово, в котором доля гласных (A, E,O,I) максимальна.
структур в функциях, работа с файлами и структурами. C++
написать программу, выполняющую на базе вашей предметной области следующие действия: создание файла, просмотр содержимого файла, добавление данных в файл, редактирование данных файла.
C++ использование структур. http://www.cyberforum.ru/cpp-beginners/thread125032.html
имеется структура типа student с полями: ФИО, год рождения, год поступления, оценки за 1, 2, и 3 экзамен (предметы любые). Создать и ввести массив из структур типа student (размер массива произвольный) и Распечатать анкетные данные студентов, имеющих двойки.
C++ вывести номера строк исходного файла и номер позиции в строке помогите плз написать на "c" программу на строки, со строками раньше не сталкивался...Заранее спс вывести номера строк исходного файла и номер позиции в строке,где встречается это слово. подробнее

Показать сообщение отдельно
starkan007
Сообщений: n/a
03.05.2010, 23:37     Посоветуйте как доработать код "Метод жука" для нахождения всех объектов на картинке
У меня дана картинка на ней несколько треугольнико надо написать программу которая находит эти треугольники!!! Я реализовал это методом жука на С++ вот только проблема он находит первый треугольник и заканчивает поиск!!! помогите реализовать чтобы поиск не заканчивался и он находил остальные треугольники и обрисовывал их контур!!!
вот код:
/ Листинг 4. Модуль выделения контуров (cpp file)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "GraphicUnit.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
 
#include <Sysutils.hpp>
 
/*
 Отслеживающий алгоритм выделения контуров
 "Алгоритм жука"
*/
 
void AlgorithmBeatle(Graphics::TBitmap* FromImage,
                     Graphics::TBitmap* ToImage)
{
 typedef enum {North, East, South, West} TDirectional;
 int X,Y;                 // Координаты первой встречи с объектом
 int cX,cY;               // Текущие координаты маркера
 Byte *Line, *ToLine;     // Обрабатываемые линии
 Byte B;                  // Значение текущего пиксела
 TDirectional Direct;     // Направление движения жука
 
 // Идем до тех пор, пока не встретим черную область
 for (Y = 0; Y < FromImage->Height; Y++)
 
 {
  Line = (Byte*)FromImage->ScanLine[Y];
  for (X = 0; X < FromImage->Width; X++)
  {
   B = Line[X];
   if (B == 255)   //black
    break;
  }
 
  // Если встречен объект, отличающийся от цвета фона (255 - белый)
  // прервать поиск
  if (X != FromImage->Width)
   break;
 }
 
 // Если не нашли ни одного черного пиксела, то выходим из процедуры
 if ((X == FromImage->Width) && (Y == FromImage->Height))
  return;
 
 // Если все нормально, начинаем обход по алгоритму жука
 ToLine = (Byte*)ToImage->ScanLine[Y];
 ToLine[X] = 0;
 
 // Поворачиваем налево (новое направление - север)
 cX = X;
 cY = Y - 1;
 Direct = North;
 Line = (Byte*)FromImage->ScanLine[cY];
 
 // Пока не придем в исходную точку, выделяем контур объекта
 while ((cX != X) || (cY != Y))
 {
  // В зависимости от текущего направления движения жука
  switch (Direct)
  {
    // Север
   case North:
   {
    B = Line[cX];
    // Если элемент "черный", поворачиваем снова "налево"
    if (B < 255)
    {
     ToLine = (Byte*)ToImage->ScanLine[cY];
     ToLine[cX] = 0;
     Direct = West;
     cX--;
    }
    // Иначе поворачиваем "направо"
    else
    {
     Direct = East;
     cX++;
    }
   }
   break;
 
   // Восток
   case East:
   {
    B = Line[cX];
    // Если элемент "черный", поворачиваем снова "налево"
    if (B < 255)
    {
     ToLine = (Byte*)ToImage->ScanLine[cY];
     ToLine[cX] = 0;
     Direct = North;
     cY--;
     Line = (Byte*)FromImage->ScanLine[cY];
    }
    // Иначе поворачиваем "направо"
    else
    {
     Direct = South;
     cY++;
     Line = (Byte*)FromImage->ScanLine[cY];
    }
   }
   break;
 
   // Юг
   case South:
   {
    B = Line[cX];
    // Если элемент "черный", поворачиваем снова "налево"
    if (B < 255)
    {
     ToLine = (Byte*)ToImage->ScanLine[cY];
     ToLine[cX] = 0;
     Direct = East;
     cX++;
    }
    // Иначе поворачиваем "направо"
    else
    {
     Direct = West;
     cX--;
    }
   }
   break;
 
   // Запад
   case West:
   {
    B = Line[cX];
    // Если элемент "черный", поворачиваем снова "налево"
    if (B < 255)
    {
     ToLine = (Byte*)ToImage->ScanLine[cY];
     ToLine[cX] = 0;
     Direct = South;
     cY++;
     Line = (Byte*)FromImage->ScanLine[cY];
    }
    // Иначе поворачиваем "направо"
    else
    {
     Direct = North;
     cY--;
     Line = (Byte*)FromImage->ScanLine[cY];
    }
    }
   }
       }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru