将 2D 图像转换为 3D 图像时轴与数组不匹配

问题描述 投票:0回答:1

将2D图像转换为3D中,为什么我要在numpy中将图像转换为数组

for object_images_array = object_images_array.transpose(1, 0, 2) # Change dimensions to (cube_depth, cube_height, cube_width)

我收到此错误吗?

ValueError:轴与数组不匹配

这是我的代码的一部分:

import os
import cv2
import numpy as np
from mayavi import mlab
output_folder = 'output_img-test-2'
cube_height, cube_width = 200, 340  
 num_frames = 6
object_images = []
while frame_number < num_frames:
    cap.set(cv2.CAP_PROP_POS_FRAMES, frame_number * frame_skip)
    ret, frame = cap.read()
    if not ret:
        break 
    # Resize 
    frame = cv2.resize(frame, (cube_width, cube_height))
    output_image_path = os.path.join(output_folder, f'output_{frame_number:04d}.png')
    cv2.imwrite(output_image_path, frame)
    frame_number += 1
cap.release()
cube_depth = len(object_images)   
x, y = np.meshgrid(np.arange(cube_width), np.arange(cube_height))
z = np.zeros_like(x)
object_images_array = np.array(object_images)
object_images_array = object_images_array.transpose(2, 0, 1)

对于将2D照片转换为3D的项目,我在numpy中将图像转换为数组时遇到问题:错误

ValueError:轴与数组不匹配”

arrays numpy opencv 3d mayavi
1个回答
0
投票

我可以通过尝试移动 2d 数组的 3 个轴来得到你的错误

In [108]: np.ones((2,3)).transpose([1,0])
Out[108]: 
array([[1., 1.],
       [1., 1.],
       [1., 1.]])

In [109]: np.ones((2,3)).transpose([1,0,2])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[109], line 1
----> 1 np.ones((2,3)).transpose([1,0,2])

ValueError: axes don't match array

transpose
移动现有轴;它不会添加新的维度。当人们考虑“行向量”与“列向量”而不认真考虑一维 numpy 数组的形状时,这是最常见的问题。

In [110]: np.arange(4).T
Out[110]: array([0, 1, 2, 3])

一维数组的转置根本不会改变形状。这对于

np.transpose
有清楚的记录。

要添加维度,您必须使用

reshape
None/newaxis
索引习惯用法

In [112]: np.ones((2,3)).reshape(2,1,3)
Out[112]: 
array([[[1., 1., 1.]],

       [[1., 1., 1.]]])

In [113]: np.ones((2,3))[:,None,:]
Out[113]: 
array([[[1., 1., 1.]],

       [[1., 1., 1.]]])
© www.soinside.com 2019 - 2024. All rights reserved.