Что нового

ImgMatrix - Обнаружение изменений (движения) на BMP снимке

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Версия AutoIt
3.3.6.1
Версия
1.1.0.0
AutoIt: 3.3.6.1+
Версия: 1.1.0.0

Категория: Графика, GDI+, Данные, Файловая система

Описание: UDF для обнаружения изменений (или движения) на ранее созданном .BMP кадре веб-камеры.

Код/Пример:
Код:
; Подключаем UDF в скрипт
    #include "ImgMatrix.inc"
   
    ; Подключаем Array.au3 (для просмотра результата с помощью _ArrayDisplay)
    #include <Array.au3>
   
   
    ; Создаем переменную для хранения массива Matrix и переменную для возращаемого массива.
    Local $aMatrix = ""
    Local $aReturn
   
    ; Предполагается, что @ScriptDir&"\Image.bmp" сохраняется другой программой. Это может быть как скриншет раб. стола, так и снимок с веб-камеры.
   
   
    ; Выполняем первый запуск функции. В переменную $aMatrix будет автоматически сохранен массив Matrix.
    $aReturn = _ImgMatrix_Check(@ScriptDir&"\Image.bmp", 10, $aMatrix, @ScriptDir&"\Test.bmp", 2, 1)
    ; В файл @ScriptDir&"\Test.bmp" будет сохранена копия @ScriptDir&"\Image.bmp" с отметками контрольных точек и технической информацией.
   
    ; Проверяем результат на предмет ошибок. Если ошибки имеются, то выводим сообщение и завершаем скрипт.
        If @Error Then Exit MsgBox(0,"Ошибка первого запуска", "Код: "&@Error)
   
    ; Выводим результат (массив будет со значениями 0, 0 в 0 строке)
    _ArrayDisplay($aReturn)
   
   
    ; Начинаем бесконечный цикл проверки изображения с интервалом в 1 сек (1000 мсек.)
    While 1
        Sleep(1000)
       
        ; Выполняем повторный запуск функции. Параметры $iIntervalPersent, $iRudeLevel, $iCheckType изменять нельзя.
        $aReturn = _ImgMatrix_Check(@ScriptDir&"\Image.bmp", 10, $aMatrix, @ScriptDir&"\Test.bmp", 2, 1)
       
        ; Проверяем результат на предмет ошибок. Если ошибки имеются, то выводим сообщение.
            If @Error Then MsgBox(0,"Ошибка повторного запуска", "Код: "&@Error)
       
        ; Выводим результат (список измененных контр. точек. Изменений нет, то врернется массив со значениями 0, 0 в 0 строке)
        _ArrayDisplay($aReturn)
   
        ; Выводим сообщение с количеством изм. контр. точек
        MsgBox(0,"Кол-во", "Изменено контрольных точек: "&$aReturn[0][0] & "(" &$aReturn[0][1]& "%)")
    Wend

Файл: ImgMatrix.inc

История версий:
1.0.0.0 - ?
1.0.0.1 - ?
1.1.0.0 - 2:44 20.10.2017

Список функций:
_ImgMatrix_Check = Функция для проверки указанного изображения на наличие изменений
_ImgMatrix_ConvertImage = Конвертирует .BMP файл в формат .JPG и добавляет надпись
_ImgMatrix_ConvertImageEx_OpenImg = Открывает указанный BMP файл для дальнейшей расширенной конвертации
_ImgMatrix_ConvertImageEx_AddLabel = Добавляет надпись в изображение
_ImgMatrix_ConvertImageEx_CloseImg = Сохраняет ранее открытое функцией _ImgMatrix_ConvertImageEx_OpenImg изображение в указанный JPG файл и закрывает его (изображение)
_ImgMatrix_ConvertImageEx_GetARgbColor = Создает ARGB цвет (для функции _ImgMatrix_ConvertImageEx_AddLabel)

Описание алгоритма работы:
Функция делит изображение на равные части. Каждая часть сжимается, после чего функция получает параметры контрольной точки (цвет, яркость или контрастность) и заносит параметры точки в новый массив. Старый массив сверяется с новым, измененные контрольные точки заносятся в другой массив, который будет возвращен пользователю после завершения работы функции.
В случае, если функция запускается первый раз, то в качестве $aMatrixArray может быть передано любое значение (но не массив!). В этом случае, функция вернет список всех контр. точек (100% измененных точек). Также функция перезапишет $aMatrixArray для следующего использования. При втором запуске функции старый $aMatrixArray уже будет существовать, функция приступит к поиску измененных контрольных точек.
До первого запуска функции Вам потребуется создать переменную с любым названием - в нее будет автоматически сохранен массив Matrix. В дальнейшем, массив Matrix будет обновляться после каждого запуска функции.

ВНИМАНИЕ!
• Не изменяйте переменную с массивом Matrix.
• Не изменяйте параметры $iIntervalPersent, $iRudeLevel, $iCheckType при повторном использовании функции со старым массивом Matrix. Еслы Вам требуется изменить какой-либо из вышеперечисленных параметров после первого запуска функции, то создайте новую (или обнулите старую) переменную с массивом Matrix. Теперь можно выполнить первый запуск функции с новыми параметрами. Массив Matrix будет перестроен.

Источник: autoit-script.ru
Автор: Astel064
 
Автор
Astel064

Вложения

  • Графика.7z
    1.4 МБ · Просмотры: 1
Последнее редактирование:
Верх