Как создать бинарную маску для рук в веб-браузере? - открыть резюме - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь создать бинарную основу маски для рук на основе этой статьи: https://medium.com/@muehler.v / simple-hand-жест-распознавание-использование-opencv-and- javascript -eb3d6ced28a0

Но я использую новую версию openCV, скомпилированную как JavaScript для веб-браузеров. В моей версии openCV cv.Vector не существует. Я не знаю, как заменить функцию cv.Vector. Я пытался переписать функции skinColorUpper, skinColorLower. Однако эффект не является удовлетворительным. Как я могу написать эти функции правильно?

    const canvasInput = document.getElementById("canvasInput");
    const canvasOutput = document.getElementById("canvasOutput");

    const skinColorUpper = (hue) => new cv.Mat(1, 1, cv.CV_8UC4,new cv.Scalar(hue,0.8 * 255, 0.6 * 255));
    const skinColorLower = (hue) => new cv.Mat(1, 1, cv.CV_8UC4,new cv.Scalar(hue,0.1 * 255, 0.05 * 255));

    const img = cv.imread(canvasInput);
    cv.cvtColor( img, imgHLS, cv.COLOR_BGR2HLS);
    const rangeMask = new cv.Mat();
    const up = skinColorUpper(15);
    const low = skinColorLower(0);

    cv.inRange(imgHLS, low, up, rangeMask);

    cv.imshow(canvasOutput, rangeMask);

Ввод: входное изображение

HLS: Изображение HLS

Вывод: маска вывода

1 Ответ

0 голосов
/ 28 апреля 2020
    function openCvReady() {
        cv['onRuntimeInitialized']=()=> {
            let src = cv.imread('canvasInput');

            let hls = new cv.Mat();
            cv.cvtColor(src, hls, cv.COLOR_BGR2HLS);

            let low = new cv.Mat(hls.rows, hls.cols, hls.type(), [0, 0.1 * 255, 0.05 * 255, 0]);
            let high = new cv.Mat(hls.rows, hls.cols, hls.type(), [15, 0.8 * 255, 0.6 * 255, 255]);

            let dst = new cv.Mat();

            cv.inRange(hls, low, high, dst);

            cv.imshow('canvasOutput', dst);
        };
    }

Выбранные параметры не очень хороши. Вот лучший вариант:

            let low = new cv.Mat(hls.rows, hls.cols, hls.type(), [0, 0, 0, 0]);
            let high = new cv.Mat(hls.rows, hls.cols, hls.type(), [150, 250, 250, 255]);
...