![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Scherhan |
|
|||
|
Unregistered |
Привет, всем!
У меня на Билдере написана прога: На одной форме сделаны два окна (обозначим: А и Б). В окне_А нах-ся Image_1, а в окне_Б - Image_2, с одинаковым рисунком в каждом Image. Поверх Image_1 и Image_2 установлены PaintBox(рисуем на нем). В окне_1 кликом мыши рисуется квадрат 24х24 (Rectangle(X0,Y0,X0+24,Y+24)), а в окне_2, также кликом мыши рисуется квадрат 96х96(Rectangle(X0,Y0,X0+96,Y+96)). Нужно перевести квадрат в матрицу: для кв-та 24х24 - Matrix_A[][] и для кв-та 96х96 - Matrix_B[][]: Вот отрывок: //----------------------------------------------------------------// const int num_rows1 = 24; const int num_cols1 = 24; const int num_rows2 = 96; const int num_cols2 = 96; int Matrix_A[num_rows1][num_cols1]; int Matrix_B[num_rows2][num_cols2]; int col1,col2,row1,row2; for (col1 = 0; col1 < num_cols1; col1++) for (row1 = 0; row1 < num_rows1; row1++) { Matrix_A[row1][col1] = ((Y0+row1),(X0+col1)); Matrix_A[num_rows1][num_cols1] = Matrix_A[row1][col1]; } for (col2 = 0; col2 < num_cols2; col2++) for (row2 = 0; row2 < num_rows2; row2++) { Matrix_B[row2][col2] = ((Y0+row2),(X0+col2)); Matrix_B[num_rows2][num_cols2] = Matrix_A[row2][col2]; } //----------------------------------------------------------------// Скажите, пожалуйста, правильно написала "перевод" координат квадратов в матрицы? Вот моя проблема: Нужно сделать, чтобы в окне_2,в квадрате 96х96 искался квадрат 24х24, путём построчного поиска в матрице (Matrix_B) до его нахождения. Как я поняла, берётся квадрат 24х24 и ищем его в квадрате 96х96 т.о.: начиная с первой точки квадрата 96х96, ищется построчно через один пиксел матрицы (Matrix_B) и до конца этой матрицы. Если нашёлся в квадрате 96х96, то в нём рисуется квадрат 24х24, а иначе-выдать сообщение. Ну, не знаю, как это сделать...помогите, пожалуйста!!! Спасибо за то, что уделили мне внимание. Пока. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Так... по порядку... в чем проблема? в том, чтобы составить алгоритм поиска или в том, как загнать кусок рисунка в матрицу?
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Scherhan |
|
|||
|
Unregistered |
Привет, Baa!
Хотелось-бы, и то и другое...Пожалуйста Спасибо за отклик. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Так...ну для начала тема тебе для размышления...
Чтобы загнать цвета рисунка в матрицу надо пройтись по ней с помощью GetPixel... Первый параметр там вроде должен быть Image->Picture->Bitmap->Canvas->Handle з.ы. этого я точно не помню, потому как билдер не использую. з.з.ы. надеюсь прогнать GetPixel ты сумеешь. И вот ты загоняешь два рисунка в матрицы. Допустим с этим управились. Далее получаем квадратную область от мышки. Делаем еще одну матрицу и запихиваем туда фрагмент первой картинки. Надеюсь выбрать фрагмент со смещением не вызовет затруднений. То же самое делаем со вторым рисунком и еще одной матрицей. А потом уже делаем поиск. Поиск...как мне кажется, поиск лучше делать по первому столбцу и колонке. Если будет достигнуто совпадение, то тогда уже делать дальнейшее сравнение. -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Если кого интересует, то на скорую руку это решается так:
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Scherhan |
|
|||
|
Unregistered |
Привет, Всем! Спасибо за помощь!!!
Прошу, извинить меня за неверное пояснение своей проблемы...Оказалось, что я, сама не поняла, что требовалось сделать 8-0 Вот более верное: Даны два снимка в формате BMP: первый снимок имеет, например, размер 512х1024, а второй - 1200х2048. Каждый из них по содержанию, одинаков, но разница есть, например, первый - снят год назад, а второй - сегодня и ещё, снимок м.б. разного масштаба. На первом снимке мышью выводим квадратик 24х24, а затем во втором - квадратик 96х96. Требуется: во втором снимке, в квадрате 96х96 найти ту область, кот. выбралась в первом снимке. Как я говорила, что надо перевести координаты квадрата 24х24, как и квадрат 96х96 в матрицы. А затем, во втором квадрате "по-пиксельно прогнать" первый квадрат. Трабла в том, как перевести координаты квадратика в матрицу и как учесть разницу в масштабах...? |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Да собственно мало чем отличается... создаем в памяти контекст и на нем увеличиваем масштаб первого квадрата, а далее ищем его во втором.
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Scherhan |
|
|||
|
Unregistered |
Привет, Ваа!
Тебе не будет трудно, мне пояснить, более яснее...а то не врубаюсь%) Ну, понимаешь, недавно начала программировать...пока, этакий чайничек Пока и Спасибо!!! |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Поясняю... хотя может этого будет мало :\
Есть у нас первая картинка (кстати, увеличение идет вдвое или размеры второй картинки не опечатка? ) Мы на ней выбрали квадратик. Далее мы делаем невидимый клон этой картинки (т.е. ползователь её не видит) и массштабируем её до размеров второй картинки. У нас получается две картинки с одинаковым масштабом. Соотв. квадратик тоже смасштабировался. Терь загоняем его в матрицу и ищем. Все. -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Scherhan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.7.2002 Репутация: нет Всего: нет |
Привет, Baa! Спасибо, что не забыл меня
Вообще, в двух окнах разные снимки. Например, фотографируем твой район: первый снимок сделан 10 ноября прошлого года с самолёта, а второй снимок сделан 23 августа этого года со спутника. На первом снимке виден твой дом, а на втором - весь район. Вот... Не пойму, как загнать квадрат в матрицу Спасибо. Пока. |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Билдера нет, а на пальцах походу не объяснишь
Эх, попробую по памяти... Картинка сама по себе матрица. Как обратиться к элементам (пикселям) картинки? очень просто так кажется: Image1->Picture->Bitmap->Canvas->Pixels [0][0]; В цикле загоняешь нужное тебе кол-во элементов в матрицу и порядок. -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Scherhan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.7.2002 Репутация: нет Всего: нет |
Всё поняла, кроме "кол-во элементов в матрицу и порядок", т.е кол-во элементов - если квадрат размером 24x24, то всего 48 элементов
Еще,вот нарисовала квадратик на снимке, координаты известны: левый верхний угол (Х0,Y0), нижний правый угол (Х0+24,Y0+24), а дальше что надо делать...Загнать Pixels [n][m], где n,m = 24 в матрицу? |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Мда...
Пойми, Pixels[x,y] - это уже матрица... матрица рисунка... возвращает COLORREF если я не ошибаюсь. Есть у тебя матрица COLORREF Matrix[24][24]; Вот в цикле заноси суда ту матрицу с нужной позиции. Выделяем квадрат на картинке. Начало его находится, допустим в x=7 y=20 соотв. конец его x+24 y+24 Терь тебе надо занести его в матрицу. Matrix [0][0] = Pixels[x][y]; Matrix [0][1] = Pixels[x][y+1]; и т.д. пока не занесешь туда нужное количество значений. делается это через цикл for (int i = 0; i < 24; i++) for (int j = 0; j < 24; j++) Matrix [i][j] = Pixels [i+x] [j+y]; -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Scherhan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 23.7.2002 Репутация: нет Всего: нет |
Вопрос возникает в другом: создали две матрицы с пикселями. Далее, надо взять Matrix_1[0][0] прогнать построчно по Matrix_2[m][m] и т.д.,но ведь по пикселам не сравнишь |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Ну вот, докатились... Извини, а чего мы в матрицу заносили?
Ведь мы цвет пикселя заносили-то... -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |