Russian Qt Forum
Ноябрь 22, 2024, 20:00
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Алгоритмы
>
Склеивание последовательных изображений
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Склеивание последовательных изображений (Прочитано 8857 раз)
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Склеивание последовательных изображений
«
:
Октябрь 01, 2013, 10:17 »
Есть достаточно интересная задача. Нужно с выделенной области экрана пользователя получать изображения и склеивать их в похожих фрагментах (на подобии панорамной съемки). Для чего это нужно, например у пользователя есть потребность снять страничку в браузере целиком, всю длинную партянку длинной скажем 3000 пикселей. Безусловно кто то скажет что можно использовать расширения и прочее, но на данный момент есть задача такого функционала для софта. Так как софт кроссплатформенный навряд ли получится получать хандл окна всех браузеров под всеми платформами. Поэтому есть идея просто получать скриншоты с выделенной области и склеивать их. Ну вот допустим я получил несколько последовательных изображений, возникает вопрос, что с ними делать дальше, как сравнивать, как склеивать ? На данный момент у меня есть такая идея:
1. Имеем два последовательных изображения.
2. Переведем их в монохромный массив (название сам придумал, не ругайте) - это значит что мы создадим двумерный массив размером с ширину и высоту исходной картинки затем получаем каждый пиксель изображения, и если средняя сумма rgb меньше 255*3 то элемент массива ставим равным 0 иначе 1.
3. Теперь все сводится к поиску одного под массива в другом.
4. После того как нашли подмассив, исходя из совпадений склеиваем изображения.
Вот такая идея есть у меня для решения этой задачи, тестовую пример еще реализую. Хотелось бы узнать у более опытных, может кто то сталкивался с подобной задачей или знает более верное решение ?
Записан
Bepec
Гость
Re: Склеивание последовательных изображений
«
Ответ #1 :
Октябрь 01, 2013, 10:43 »
Я бы просто брал полоску шириной в N от конца скриншота и пробегался по следующему скриншоту в поисках совпадения. В принципе это не такая уж и ресурсоёмкая операция.
PS опыта маловато, но чем мог помог
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Склеивание последовательных изображений
«
Ответ #2 :
Октябрь 01, 2013, 11:22 »
Упрощенный пример: первый скриншот содержит белый кусок справа (с конца) а второй белый слева (с начала). Нет возможности определить какие столбцы оригиналы а какие пересечения.
Еще соображения: необходимость сделать неск скриншотов не то чтобы тяжела, но скажем, юзера "не порадует". А если скролл приличный - вылетите по размеру имеджа. В общем мрачно
Записан
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Склеивание последовательных изображений
«
Ответ #3 :
Октябрь 01, 2013, 11:37 »
Igors, насчет первого согласен, поэтому и не хочу брать куски изображения, думаю стоит отталкиваться от некого порога совпадения массивов, хотя могут быть проблемы с текстом, или может быть поиск одинаковых точек (только как их искать пока не представляю). Насчет размера QImage, если честно не помню как его высчитать, но думаю максимальная ширина будет 1920px , а отсюда можно посчитать высоту и ограничить ее для пользователей, не думаю ,что она получится маленькой.
Записан
Bepec
Гость
Re: Склеивание последовательных изображений
«
Ответ #4 :
Октябрь 01, 2013, 16:21 »
Кхм. Я думал мы говорим о скриншоте страницы браузера. Как там может получаться кусок слева белый и кусок справа белый, если скриншоты сделаны с наложением?
Я отталкивался именно от мысли аля пользователь крутит страницу и делает скрины. Соответственно нужно убрать наложения и получить портянку настоящей страницы.
Если наложения нет, то невозможно вычислить следующая это часть страницы или нет, потому выбор зависит от приложения уже - склеить дальше если нету совпадений, или взять следующий в надежде на продолжение.
Записан
kamre
Частый гость
Offline
Сообщений: 233
Re: Склеивание последовательных изображений
«
Ответ #5 :
Октябрь 01, 2013, 16:47 »
Цитата: Bepec от Октябрь 01, 2013, 16:21
Как там может получаться кусок слева белый и кусок справа белый, если скриншоты сделаны с наложением?
Например, попалась страница с флэш-роликом (gif-анимацией) и наложение получилось как раз по ролику. Скриншоты зафиксировали разные моменты в ролике и ничего общего у наложений нет.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Склеивание последовательных изображений
«
Ответ #6 :
Октябрь 01, 2013, 17:06 »
Как-то все это "не смотрится", в духе 90-х или раньше
Идейное/нормальное решение выглядело бы как забрать у браузера страницу и шлепнуть ее на контексте битмапа. Все равно страдать - так уж за дело
Записан
Bepec
Гость
Re: Склеивание последовательных изображений
«
Ответ #7 :
Октябрь 01, 2013, 17:57 »
to Kamre - а давайте вы определите что это следующий скриншот
Если вся страница меняется ежесекундно?
Ответ - никак
Записан
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Склеивание последовательных изображений
«
Ответ #8 :
Октябрь 01, 2013, 23:08 »
Цитата: Igors от Октябрь 01, 2013, 17:06
Как-то все это "не смотрится", в духе 90-х или раньше
Идейное/нормальное решение выглядело бы как забрать у браузера страницу и шлепнуть ее на контексте битмапа. Все равно страдать - так уж за дело
мне в обще больше нравится идея с расширением для браузера, но браузер я привел только для примера, а если это документ Word или текстовый документ или еще что нибудь, таблица из программы например. Поэтому и есть мысли именно по склеиванию картинок.
Записан
Bepec
Гость
Re: Склеивание последовательных изображений
«
Ответ #9 :
Октябрь 02, 2013, 09:25 »
to ecspertiza: А как вы собираетесь склеивать скриншоты без наложения?
Записан
ecspertiza
Супер
Offline
Сообщений: 1053
С уважением, мастер конфетного цеха!
Re: Склеивание последовательных изображений
«
Ответ #10 :
Октябрь 02, 2013, 09:59 »
А никто и не говорит ,что наложения (я так понимаю это одинаковые части изображения) не будет. В идеале я бы получал картинку с экрана хотя бы раз 5ть в секунду и естественно склеивал бы портянку.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Склеивание последовательных изображений
«
Ответ #11 :
Октябрь 02, 2013, 10:14 »
Ладно, постановка какая есть, вернемся к содержательной части
Цитата: ecspertiza от Октябрь 01, 2013, 10:17
2. Переведем их в монохромный массив (название сам придумал, не ругайте) - это значит что мы создадим двумерный массив размером с ширину и высоту исходной картинки затем получаем каждый пиксель изображения, и если средняя сумма rgb меньше 255*3 то элемент массива ставим равным 0 иначе 1.
3. Теперь все сводится к поиску одного под массива в другом.
Нормально, только зачем монохромнвй, средняя сумма и.т.п.? Это можно сделать комфортно, используя для накопления "просто суммы"
Код
C++ (Qt)
struct
Real_RGB
{
float
r
,
g
,
b
;
}
;
Теперь для первого столбца второго находим совпадающий солбец справа в первом. Проверяем совпадение "хвоста", если нет - опять ищем продвигаясь по первому справа налево. Ничего не нашли - ну клеим "как есть" возможно вставляя маленькую картинку "разрыв"
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...