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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Distatic
0 / 0 / 0
Регистрация: 30.03.2014
Сообщений: 25
#1

Программа, удаляющая провода и царапины с фотографий - C++

25.05.2014, 23:37. Просмотров 224. Ответов 0
Метки нет (Все метки)

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

Сам алгоритм довольно топорный:

будем удалять с картинки объекты, которые имеют:

1) ширину = 2% от ширины картинки
длину любую
2) ширину любую
длину = 2% от длины картинки

находим эти объекты, красим в цвет 255, затем закрашиваем белые пиксели в цвет соседних.

написал код (тоже топорно, но я только учусь), который зацикливается на том моменте, когда я пытаюсь закрасить провода в белый цвет, подскажите пожалуйста в чем причина?

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
int main()
{
matr grey_first,
       grey_second;
 
        grey_first.loadBMPGrey("Picture\\Original\\original.bmp");
    grey_second.loadBMPGrey("Picture\\Original\\original.bmp");
      
        int step = 32;
 
        for (int x = 0; x < mx; x++)
    {
        for (int y = 0; y < my; y++)
        {
            grey_second.put(x, y, (grey_first.get(x, y) / step) * step);           
        }
    }
        
        int wid,
        hei;
 
        wid = (mx / 100) * 2;
    hei = (my / 100) * 2;
 
        int search_wid = 1,
        search_hei = 1,
        flag = 0,
//как раз тот кусок, который зацикливается
        for (int x = 0; x < mx; x++)
    {
            for (int y = 0; y < my; y++)
            {
                while (flag = 0)
                {
                    if ((grey_second.safeGet(x, y + flag_1)) == (grey_second.safeGet(x, y)))
                    {
                        search_hei++;
                        flag_1++;
                    }
 
                    else
                    {
                        flag = 1;
                        break;
                    }
                }
 
                cout<<"flag1="<<flag_1<<endl;
                flag=0;
 
                while (flag = 0)
                {
                    if ((grey_second.safeGet(x, y - flag_2)) == (grey_second.safeGet(x, y)))
                    {
                        search_hei++;
                        flag_2++;
                    }
 
                    else
                    {
                        flag = 1;
                        break;
                    }
                }
 
                cout<<"flag2="<<flag_2<<endl;
                flag=0;
 
                while (flag = 0)
                {
                    if ((grey_second.safeGet(x + flag_3, y)) == (grey_second.safeGet(x, y)))
                    {
                        search_wid++;
                        flag_3++;
                    }
 
                    else
                    {
                        flag = 1;
                        break;
                    }
                }
 
                cout<<"flag3="<<flag_3<<endl;
                flag=0;
 
                while (flag = 0)
                {
                    if ((grey_second.safeGet(x - flag_4, y)) == (grey_second.safeGet(x, y)))
                    {
                        search_wid++;
                        flag_4++;
                    }
 
                    else
                    {
                        flag = 1;
                        break;
                    }
                }
                                cout<<"flag4="<<flag_4<<endl;
 
 
                                if (((search_wid <= wid) && (search_hei > hei)) || ((search_wid > wid) && (search_hei <= hei)))
                    {
                        grey_second.safePut(x, y, 255);
                        
                    }
                
            }
    }
    // конец этого куска
    int repair;
 
 
       for (int x = 0; x < mx; x++)
    {
        for (int y = 0; y < my; y++)
        {
            if ((grey_second.safeGet(x, y)) == 255)
            {
                if ((grey_second.safeGet(x, y)) != (grey_second.safeGet(x, y - 1)))
                {
                    repair = grey_second.safeGet(x, y - 1);
                    grey_second.safePut(x, y, repair);
                }
 
                if((grey_second.safeGet(x, y)) != (grey_second.safeGet(x, y + 1)))
                {
                    repair = grey_second.safeGet(x, y + 1);
                    grey_second.safePut(x, y, repair);
                }
 
                if((grey_second.safeGet(x, y)) != (grey_second.safeGet(x - 1, y)))
                {
                    repair = grey_second.safeGet(x - 1, y);
                    grey_second.safePut(x, y, repair);
                }
 
                if((grey_second.safeGet(x, y)) != (grey_second.safeGet(x + 1, y)))
                {
                    repair = grey_second.safeGet(x + 1, y);
                    grey_second.safePut(x, y, repair);
                }
            }
        }
    }
 
        grey_first.saveBMPGrey("Picture\\grey_first.bmp");
    grey_second.saveBMPGrey("Picture\\grey_second.bmp");
 
        system("PAUSE");
    return EXIT_SUCCESS;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 23:37     Программа, удаляющая провода и царапины с фотографий
Посмотрите здесь:

Программа удаляющая программы - C++
Привет всем! Хочу написать программу удаляющую другие программы (как Add or Remove Programs в Windows). Какими функциями пользоваться?...

Программа, удаляющая лишние пробелы - C++
На просторах форума столкнулся с программой по удалению лишних пробелов, объясните пожалуйста работу некоторых строк #include...

Программа удаляющая комментарии из листинга программы С++ - C++
помогите пожайлуста , никак не могу разобраться. Создать програму, какая будет удалять с кода програмы языка С++ (файл *.cpp) коментарии...

Программа удаляющая все комментарии из листинга программы С++ - C++
Помогите пожалуйста написать программу,удаляющую все комментарии из листинга программы С++.Программа должна обрабатывать файл *.cpp...

Программа,удаляющая все чётные цифры из строки - C++
Программа,удаляющая все чётные цифры из строки

программа, удаляющая из заданного текста все части, заключенные в скобки - C++
Написать программу удаляющую из заданного текста все части, заключенные в круглые скобки, вместе со скобками.

Функция, удаляющая элемент из двусвязного списка - C++
Написать функцию, удаляющую элемент из двусвязного списка. Убедитесь, что программа работает, когда надо удалить первый и/или последний...

Функция, удаляющая элементы массива по критерию - C++
Вообщем задание такое изначально: написать функцию, удаляющую элементы массива произвольного типа данных, для которых переданная ей в...

Функция удаляющая из массива заданный элемент - C++
Написать и протестировать функцию compress(), которая сжимает массив, удаляя из него элемент, номер которого введится с клавиатуры.

Функция, удаляющая все элементы в списке - C++
Как ее реализовать? Прошу помощи


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru