Russian Qt Forum
Сентябрь 21, 2024, 12:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Найти позицию картинки в картинке  (Прочитано 12243 раз)
pakulo
Гость
« : Ноябрь 02, 2007, 23:43 »

Есть скажем картинки 200х600 и есть картинка 200х1.
Как можно найти по какой координате у размещена картинка 2 в картинке 1.

Спасиб!
Записан
pakulo
Гость
« Ответ #1 : Ноябрь 02, 2007, 23:57 »

есть вариант сравнить по пикселям, но может как-то по-другому можно...
Записан
QCasper
Гость
« Ответ #2 : Ноябрь 03, 2007, 00:04 »

Что значит "Есть"? Дано два QImage или что?
Записан
Dodge
Гость
« Ответ #3 : Ноябрь 03, 2007, 00:34 »

Чето я не понял, нужна корреляционная функция для нахождения заданного изобрижения внутри целевого?
Записан
pakulo
Гость
« Ответ #4 : Ноябрь 03, 2007, 00:35 »

Чето я не понял, нужна корреляционная функция для нахождения заданного изобрижения внутри целевого?
да

to QCasper, да, дано два QImage
Записан
Kainit
Гость
« Ответ #5 : Ноябрь 03, 2007, 15:05 »

Если задача простая (а я подозреваю что она именно такая), пройдитесь в цикле и попиксельно сравните.

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

Поставьте задачу корректно, если хотите получить толковый ответ.
Записан
pakulo
Гость
« Ответ #6 : Ноябрь 03, 2007, 19:52 »

Задача простая но усложненная...
Картинки крутить не нужно...
Просто есть картинка 400х200 и 400х1 и нужно найти позицию второй в первой, по высоте...
Тут другая проблема возникла, что пару пикселей второй картинке чу-чуть могут отличаться из-за другого качества jpg.
Поэтому просто по пикселям сравнить нельзя, есть какие-то алгоритмы?
Записан
Dodge
Гость
« Ответ #7 : Ноябрь 04, 2007, 00:28 »

Задача простая но усложненная...
Картинки крутить не нужно...
Просто есть картинка 400х200 и 400х1 и нужно найти позицию второй в первой, по высоте...
Тут другая проблема возникла, что пару пикселей второй картинке чу-чуть могут отличаться из-за другого качества jpg.
Поэтому просто по пикселям сравнить нельзя, есть какие-то алгоритмы?
Хм... ну можно считать степень "похожести" строк, по каждой из цветовых компонент.

Берем пиксель p1 на целевом изображении, и пиксель p2 на заданном.
Т.о.
Код:
float factor[n] = 0.0; // где n - кол-во строк
...//цикл перебора
       
...factor[y] += p1.red/p2.red + p1.green/p2.green + p1.blue/p2.blue;


у какой строки factor меньше та и похожа.

Это не лучший вариант, но самый простой
Записан
Dodge
Гость
« Ответ #8 : Ноябрь 04, 2007, 01:03 »

ДА, совсем головане работает, проверку деления на 0 нада ввести... а лучше сделать следующее: заменять значение компонент - 0, на 1, точность сильно не уменьшится, зато головной боли меньше.  Улыбающийся
Записан
pakulo
Гость
« Ответ #9 : Ноябрь 04, 2007, 01:38 »

Спасибо! Сделал почти также, только еще проще, пока вроде работает...
Хотя твой вариант получше будет...

Сделал так:
считываю попикселям и считаю сколько одинаковых пикселей, в какой строке больше то и записываю
Записан
Dodge
Гость
« Ответ #10 : Ноябрь 04, 2007, 01:52 »

Спасибо! Сделал почти также, только еще проще, пока вроде работает...
Хотя твой вариант получше будет...

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

А вообще, если картинко будет пережата, то одинаковых пикселов вообще не найдешь.
Записан
pakulo
Гость
« Ответ #11 : Ноябрь 04, 2007, 02:51 »

Да, мой способ работает через раз (((
А твой я что-то реализовал но оно вообще не правильно показывает...
Можешь проверить и скинуть примерчик?
Записан
Tonal
Гость
« Ответ #12 : Ноябрь 04, 2007, 09:55 »

Если трактовать цвет пиксела как точку в трёхмерном цветовом пространстве RGB, то можно определить цветовое расстояние между 2мя цветами:
Код:
colod_diff = abs(sqrt(r1*r1+g1*g1+b1*b1)-sqrt(r2*r2+g2*g2+b2*b2));
Ну а для набора пикселов можно посчитать среднее по таким расстояниям.
Строка с минимальным расстоянием и будет искомой.
Записан
Dodge
Гость
« Ответ #13 : Ноябрь 04, 2007, 13:14 »

Да, мой способ работает через раз (((
А твой я что-то реализовал но оно вообще не правильно показывает...
Можешь проверить и скинуть примерчик?
Ок, во вторник скину.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #14 : Ноябрь 06, 2007, 01:52 »

Мда, вот сколько сижу на форуме, а проблем с распознаванием образов еще никто не поднимал...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 23.