Здравствуйте, paradok, Вы писали:
P>https://www.codeconvert.ai/python-to-c++-converter
P>#include <iostream>
P>#include <opencv2/opencv.hpp>
P>int main() {
P> float scale = 1.0 / 255.0;
P> cv::Size shape(1, 1, 3);
P> cv::Mat mean = (cv::Mat_<float>(3, 1) << 0.485, 0.456, 0.406);
P> cv::Mat std = (cv::Mat_<float>(3, 1) << 0.229, 0.224, 0.225);
P> CV_Assert(img.type() == CV_32F);
P> cv::Mat normalizedImg = (img * scale — mean) / std;
P> return 0;
P>}
Спасибо за подсказку. Попытался это повторить на TS/JS — ничего не вышло

. Конвертор из питона в ts и в js наконвертил тоже некомпилируемый код

. Остался на медленном переборе пока что.
import * as nj from 'numjs';
declare var cv;
//...
const imageRGB = new cv.Mat();
cv.cvtColor(image, imageRGB, cv.COLOR_BGRA2RGB, 3);
const img = nj.array(imageRGB.data, 'float32').reshape(imageRGB.rows, imageRGB.cols, imageRGB.channels());
const [h, w, c] = img.shape;
// numpy: (img.astype('float32') * self.scale - self.mean) / self.std
for (let y = 0; y < h; ++y) {
for (let x = 0; x < w; ++x) {
for (let i = 0; i < c; ++i) {
const originalUint8 = img.get(y, x, i);
const normalisedFloat32 = (originalUint8 * this.scale - this.mean[i]) / this.std[i];
img.set(y, x, i, normalisedFloat32);
}
}
}
return img;
Оба OpenCV и NumJS бросают на попытке операции на 2 массивах с разной shape. Возможно, NumPy под капотом размножает 1 пиксел (вектор) на всю shape чтоб совпадали размеры- хз.
Попробовать тоже для исходной картинки сделать такого же размера 2 маски одна mean, вторая std и тогда скормить в OpenCV?