Автор Тема: поиск изображения в картинке  (Прочитано 8122 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн black1 [?]

  • Новичок
  • *
  • Сообщений: 39
  • Репутация: 0
  • C++,Pic
    • Награды
Есть набросок кода,  открываю bmp , и хочу найти в нем кусок другого bmp, получить координаты.

$hImage2 найти в  $hImage1 и получить координаты
Код: AutoIt [Выделить]
 #include <ScreenCapture.au3>
   
   ; Инициализация библиотеки GDI+
    _GDIPlus_Startup ()
   
       ;  Грузим изображение
    $hBitmap0 = _WinAPI_CreateBitmap(890, 1119, 1, 32)
    $hImage0 = _GDIPlus_BitmapCreateFromHBITMAP( $hBitmap0)
    $hImage1 = _GDIPlus_ImageLoadFromFile ('d:\tt.bmp')
    $hBrush1 = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
   
    $hImage2 = _GDIPlus_ImageLoadFromFile ('D:\logo.bmp')

    ; Рисует одно изображение в другом
    $nomer = "5"
    $hGraphics = _GDIPlus_ImageGetGraphicsContext ($hImage0)

   _GDIPlus_GraphicsDrawImage ($hGraphics, $hImage1, 0, 0)
   _GDIPlus_GraphicsDrawString($hGraphics, "test "&$nomer, 120, 30, "Arial", 16, 0)
 
 
 
    ; Сохраняет изображение в файл
    _GDIPlus_ImageSaveToFile ($hImage0,'D:\tt' &'2.bmp')
   ; _GDIPlus_ImageSaveToFile ($hImage0,'c:\' &$art &'.bmp')
  _GDIPlus_BrushDispose($hBrush1)
    ; Очищает ресурсы
    _GDIPlus_ImageDispose ($hImage1)
    _GDIPlus_ImageDispose ($hImage2)
    ;_GDIPlus_ImageDispose ($hImage2)
    _WinAPI_DeleteObject ($hBitmap0)
    ;_WinAPI_DeleteObject ($hBitmap2)
    _WinAPI_DeleteObject ( $hImage0)
    ; Закрывает библиотеку GDI+
    _GDIPlus_ShutDown ()





Добавлено: Январь 27, 2014, 13:54:36
по идеи надо по пиксельно как то.. может наброски есть похожие у кого.. или функции какие использовать
« Последнее редактирование: Январь 29, 2014, 14:27:30 от black1, Причина: Объединение сообщений »

Русское сообщество AutoIt

поиск изображения в картинке
« Отправлен: Январь 27, 2014, 10:31:41 »

Оффлайн black1 [?]

  • Новичок
  • *
  • Сообщений: 39

  • Автор темы
  • Репутация: 0
  • C++,Pic
    • Награды
Re: поиск изображения в картинке
« Ответ #1, Отправлен: Январь 28, 2014, 16:57:33 »
нашел похожее http://www.autoitscript.com/forum/topic/66545-find-bmp-in-another-bmp-imagesearch/?hl=%20compare%20%20images
осталось как то прикрутить. чето получилось... там на сайте веррху пример.. ниже код udf

« Последнее редактирование: Январь 28, 2014, 17:16:38 от black1 »

Оффлайн WSWR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 935
  • Репутация: 352
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: поиск изображения в картинке
« Ответ #2, Отправлен: Январь 28, 2014, 17:13:19 »
Что-то каждый день про это спрашивают


Посмотри этот пример
http://autoit-script.ru/index.php?topic=12356.msg79842#msg79842
Две картинки, большая и маленькая, преобразовываем их в строки.
Потом ищем через StringInStr() строку пикселей из маленькой картинки в большой.

Оффлайн black1 [?]

  • Новичок
  • *
  • Сообщений: 39

  • Автор темы
  • Репутация: 0
  • C++,Pic
    • Награды
Re: поиск изображения в картинке
« Ответ #3, Отправлен: Январь 28, 2014, 17:17:44 »
ок, хммм гениально построчно искать, щя посмотрю

Русское сообщество AutoIt

Re: поиск изображения в картинке
« Ответ #3 Отправлен: Январь 28, 2014, 17:17:44 »

Оффлайн WSWR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 935
  • Репутация: 352
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: поиск изображения в картинке
« Ответ #4, Отправлен: Январь 28, 2014, 17:38:10 »
black1
У меня там правда косяк вроде в конце, где координаты считаются, немного ошибается

Оффлайн black1 [?]

  • Новичок
  • *
  • Сообщений: 39

  • Автор темы
  • Репутация: 0
  • C++,Pic
    • Награды
Re: поиск изображения в картинке
« Ответ #5, Отправлен: Январь 28, 2014, 17:58:46 »
WSWR
 скинь пожалуйста пример рабочий.. с картинками ..а то на вскидку смотришь разный код картинок почемуто

с урл выше что то получается -1;228;322;-1;-1 CALCULATOR.BMP in SCREEN ** matchtype 1 time elapsed: 830.71083355622 milliseconds

« Последнее редактирование: Январь 28, 2014, 18:07:40 от black1 »

Оффлайн WSWR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 935
  • Репутация: 352
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: поиск изображения в картинке
« Ответ #6, Отправлен: Январь 28, 2014, 18:26:16 »
black1
Выложи примеры картинок, что и где искать
так проще будет

Оффлайн black1 [?]

  • Новичок
  • *
  • Сообщений: 39

  • Автор темы
  • Репутация: 0
  • C++,Pic
    • Награды
Re: поиск изображения в картинке
« Ответ #7, Отправлен: Январь 28, 2014, 19:48:04 »
WSWR
прикрепил архив там 2 изображение примерно что имею

1.bmp у меня на картинке слова-буквы, вот если на картинке нашлось WWN(2.bmp) то над координаты где, и перерисую на другой символ..

может можно будет попробовать даже не координатами а строками заменить? или структура повредится картинки? 


Добавлено: Январь 28, 2014, 19:59:04
на прошлой ссылке не скачал..тоже..
Ошибка!
Вы не можете зайти в этот раздел


Добавлено: Январь 28, 2014, 20:03:09
написано ошибка изза переездов.. выкладывать на другой хостинг
http://yadi.sk/d/gFX6PFEVGt5Ve


Добавлено: Январь 28, 2014, 20:21:16
омг похожий топик http://autoit-script.ru/index.php/topic,961.0.html посмотрю может решено..
« Последнее редактирование: Январь 28, 2014, 20:21:16 от black1, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: поиск изображения в картинке
« Ответ #7 Отправлен: Январь 28, 2014, 19:48:04 »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 461
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: поиск изображения в картинке
« Ответ #8, Отправлен: Январь 28, 2014, 23:58:16 »
ТЫК BmpSearch

Оффлайн black1 [?]

  • Новичок
  • *
  • Сообщений: 39

  • Автор темы
  • Репутация: 0
  • C++,Pic
    • Награды
Re: поиск изображения в картинке
« Ответ #9, Отправлен: Январь 29, 2014, 09:07:59 »
inververs
спасибо, красивый пример.. они берут скрин с экрана.. у меня файлы BMP.. пытаюсь прикрутить пока без результатно..
Код: AutoIt [Выделить]
Local $hSource = _ScreenCapture_Capture('')     на $hBitmap = _GDIPlus_BitmapCreateFromFile(@ScriptDir & '\1.png')

был близок hbitmap сек
Код: AutoIt [Выделить]
 _GDIPlus_ImageLoadFromFile ('D:\logo.bmp')

далее ругается
Код: AutoIt [Выделить]
"C:\Program Files\AutoIt3\Include\BmpSearch.au3" (46) : ==> Variable must be of type "Object".:
Local $iRowInc = ($tSizeSource.X - $tSizeFind.X) * 4
Local $iRowInc = ($tSizeSource.X - $tSizeFind^ ERROR

« Последнее редактирование: Январь 29, 2014, 09:33:01 от black1 »

Оффлайн WSWR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 935
  • Репутация: 352
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: поиск изображения в картинке
« Ответ #10, Отправлен: Январь 29, 2014, 13:59:39 »
black1
Главное при таком способе правильно выбрать подстроку из маленькой картинки
У твоей маленькой картинки белые поля не обрезаны, поэтому лучше брать строку из середины
Код: AutoIt [Выделить]
#include <GDIPlus.au3>

_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromFile(@ScriptDir & '\2.bmp')
$Width = _GDIPlus_ImageGetWidth($hBitmap)
$Height = _GDIPlus_ImageGetHeight($hBitmap)
$tMap = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $Width, $Height, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
$bData1 = DllStructGetData(DllStructCreate('byte[' & ($Width * $Height * 4) & ']', DllStructGetData($tMap, 'Scan0')), 1)
_GDIPlus_BitmapUnlockBits($hBitmap, $tMap)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
$bData1 = StringTrimLeft($bData1, 2)

$countstring = StringMid($bData1, $Width * 8 * Round ($Height / 2), $Width * 8) ;  берем строку пикселей, которая на середине маленькой картинки
;ConsoleWrite($countstring & @CR)

_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromFile(@ScriptDir & '\1.bmp')
$Width = _GDIPlus_ImageGetWidth($hBitmap)
$Height = _GDIPlus_ImageGetHeight($hBitmap)
$tMap = _GDIPlus_BitmapLockBits($hBitmap, 0, 0, $Width, $Height, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
$bData2 = DllStructGetData(DllStructCreate('byte[' & ($Width * $Height * 4) & ']', DllStructGetData($tMap, 'Scan0')), 1)
_GDIPlus_BitmapUnlockBits($hBitmap, $tMap)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
$bData2 = StringTrimLeft($bData2, 2)
;ConsoleWrite($bData & @CR)

For $i = 1 To 100
    $sTring1 = StringInStr($bData2, $countstring, 0, $i) - 1
    If $sTring1 > 0 Then
        $y = Ceiling($sTring1 / $Width / 8) - 1
        $x = ($sTring1 / 8 - $y * $Width)
        ConsoleWrite($x & ' ' & $y & @CR)
    Else
        ExitLoop
    EndIf
Next
 


Оффлайн black1 [?]

  • Новичок
  • *
  • Сообщений: 39

  • Автор темы
  • Репутация: 0
  • C++,Pic
    • Награды
Re: поиск изображения в картинке
« Ответ #11, Отправлен: Январь 29, 2014, 14:26:06 »
WSWR ;D
Спасибо!, изучаю. как эт работает))
там смотрел  http://www.autoitscript.com/forum/topic/66545-find-bmp-in-another-bmp-imagesearch/?hl=%20compare%20%20images код Actual functions вроде бы тоже через строку там в низу и поиск координат построчно.. над тоже будет изучит) может улучшить как то получится..

Оффлайн boosterbear [?]

  • Новичок
  • *
  • Сообщений: 1
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: поиск изображения в картинке
« Ответ #12, Отправлен: Февраль 03, 2015, 11:27:34 »
.../forum/topic/158264-bmpsearch-search-for-bitmap-within-bitmap-assembly-version
ТЫК BmpSearch
Стремно пользоваться этим модулем. Детально ковырять его времени нет, но модификация области памяти, в которой живет kernel32.dll как бы намекает...


Добавлено: Февраль 03, 2015, 12:31:44
У кого-нибудь работает ImageSearch.au3 на Win7 x64?
« Последнее редактирование: Февраль 03, 2015, 12:31:44 от boosterbear, Причина: Объединение сообщений »

Оффлайн ivanius [?]

  • Новичок
  • *
  • Сообщений: 74
  • Репутация: 4
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: поиск изображения в картинке
« Ответ #13, Отправлен: Февраль 03, 2015, 19:49:15 »
если поиск на экране могу помочь с этим, всегда пользуюсь вот этой прогой - ООООЧЕНЬ полезная штука для поиска обьектов:
UniqueColorsSearch2
https://sites.google.com/site/leaxplace/home
Реально крутая штука, если не поможет (не найдешь уникальные пиксели)
тогда путь брать любые 2-8 пикселей из маленькой картинки находить первый, проверять остальные, можно даже обычным пиксельсеачем и гетпиксель потом.

Русское сообщество AutoIt

Re: поиск изображения в картинке
« Ответ #13 Отправлен: Февраль 03, 2015, 19:49:15 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
9525 Просмотров
Последний ответ Январь 29, 2014, 16:03:54
от black1
8 Ответов
5198 Просмотров
Последний ответ Октябрь 16, 2011, 03:41:45
от Alexaut
2 Ответов
3162 Просмотров
Последний ответ Январь 25, 2012, 00:12:06
от CreatoR
5 Ответов
2844 Просмотров
Последний ответ Февраль 08, 2013, 14:15:50
от madmasles
1 Ответов
6475 Просмотров
Последний ответ Октябрь 24, 2014, 22:39:06
от DaymonX
16 Ответов
5364 Просмотров
Последний ответ Апрель 16, 2015, 12:07:19
от InnI
4 Ответов
3708 Просмотров
Последний ответ Апрель 19, 2015, 17:57:44
от Bigi
4 Ответов
1144 Просмотров
Последний ответ Апрель 22, 2016, 00:56:50
от Alofa
1 Ответов
374 Просмотров
Последний ответ Сентябрь 14, 2017, 18:55:06
от Viktor19870628
0 Ответов
220 Просмотров
Последний ответ Июнь 05, 2018, 19:32:09
от InnI