Информация об изменениях

Сообщение Re[3]: OpenCV.js смог - если кому интересно от 22.10.2023 6:48

Изменено 22.10.2023 6:49 Артём

Re[3]: OpenCV.js смог - если кому интересно
Здравствуйте, Артём, Вы писали:

Аё>Оба OpenCV и NumJS бросают на попытке операции на 2 массивах с разной shape. Возможно, NumPy под капотом размножает 1 пиксел (вектор) на всю shape чтоб совпадали размеры- хз.


Аё>Попробовать тоже для исходной картинки сделать такого же размера 2 маски одна mean, вторая std и тогда скормить в OpenCV?


    // numpy: (img.astype('float32') * self.scale - self.mean) / self.std

    const imageRGB32F = new cv.Mat();
    const imageRGB = new cv.Mat();
    cv.cvtColor(image, imageRGB, cv.COLOR_BGRA2RGB, 3);

    imageRGB.convertTo(imageRGB32F, cv.CV_32F, this.scale);
    cv.subtract(imageRGB32F,
      new cv.Mat(image.rows, image.cols, cv.CV_32FC3, [...this.mean, 1]),
      imageRGB32F);
    cv.divide(imageRGB32F,
      new cv.Mat(image.rows, image.cols, cv.CV_32FC3, [...this.std, 1]),
      imageRGB32F);

    data.image = nj.array(imageRGB32F.data32F, 'float32').reshape(...matImageShape(imageRGB32F));


\* всe Mat должны удаляться вручную после использования imageRGB.delete(). Авто удаление за кадром.
Re[3]: OpenCV.js смог - если кому интересно
Здравствуйте, Артём, Вы писали:

Аё>Оба OpenCV и NumJS бросают на попытке операции на 2 массивах с разной shape. Возможно, NumPy под капотом размножает 1 пиксел (вектор) на всю shape чтоб совпадали размеры- хз.


Аё>Попробовать тоже для исходной картинки сделать такого же размера 2 маски одна mean, вторая std и тогда скормить в OpenCV?


    // numpy: (img.astype('float32') * self.scale - self.mean) / self.std

    const imageRGB32F = new cv.Mat();
    const imageRGB = new cv.Mat();
    cv.cvtColor(image, imageRGB, cv.COLOR_BGRA2RGB, 3);

    imageRGB.convertTo(imageRGB32F, cv.CV_32F, this.scale);
    cv.subtract(imageRGB32F,
      new cv.Mat(image.rows, image.cols, cv.CV_32FC3, [...this.mean, 1]),
      imageRGB32F);
    cv.divide(imageRGB32F,
      new cv.Mat(image.rows, image.cols, cv.CV_32FC3, [...this.std, 1]),
      imageRGB32F);

    data.image = nj.array(imageRGB32F.data32F, 'float32').reshape(...matImageShape(imageRGB32F));


\* всe Mat должны удаляться вручную после использования imageRGB.delete(). Мемоизация и авто-удаление за кадром.