Numpy.transpose Python по осям, эквивалентный для Mat Java - PullRequest
1 голос
/ 01 октября 2019

Я хочу сделать ту же функцию на Java openCV, но я застрял в части транспонирования, так как я не нашел никакой реализации в Java Mat, это функция в Python:

def preprocess(im):
    # Convert to float32
    test_img = im.astype(np.float32)
    # Extrapolate image with a small border in order obtain an accurate reshaped image after DUC layer
    test_shape = [im.shape[0],im.shape[1]]
    cell_shapes = [math.ceil(l / 8)*8 for l in test_shape]
    test_img = cv.copyMakeBorder(test_img, 0, max(0, int(cell_shapes[0]) - im.shape[0]), 0, max(0, int(cell_shapes[1]) - im.shape[1]), cv.BORDER_CONSTANT, value=rgb_mean)
    test_img = np.transpose(test_img, (2, 0, 1))
    # subtract rbg mean
    for i in range(3):
        test_img[i] -= rgb_mean[i]
    test_img = np.expand_dims(test_img, axis=0)
    # convert to ndarray
    test_img = mx.ndarray.array(test_img)
    return test_img

Этомоя реализация в Java:

Mat src, dst = new Mat();
    int top, bottom, left, right;
    int borderType = Core.BORDER_CONSTANT;
    src = Imgcodecs.imread("name", Imgcodecs.IMREAD_COLOR);
    int[] shapes = {src.height(),src.width()};
    double[] cellShapes = new double[shapes.length];
    for (int i = 0; i<shapes.length;i++){
        cellShapes[i] = Math.ceil(shapes[0]/8)*8;
    }

    top = 0;
    bottom = Math.max(0,(int)cellShapes[0]-shapes[0]);
    left = 0;
    right = Math.max(0,(int)cellShapes[1]-shapes[1]);

    Scalar value = Core.mean(src);

    Core.copyMakeBorder( src, dst, top, bottom, left, right, borderType, value);
    /*
    transpose stuff
     */
    Mat nMat = new Mat();
    Core.subtract(dst,value,nMat);

    float[] image = new float[(int)((nMat.total())) * nMat.channels()];
    dst.get(0,0,image);

Любая помощь, чтобы закончить этот код?

...