2017-10-09 88 views
0

我是Python新手。我写的(Python的3.6.1)使用skimage.transform工具图像旋转一个简单的函数:Python:在函数内部复制RGB图像

def rotate_20rand(X): 
    X_aug = np.zeros_like(X) 
    for i,img in enumerate(X): 
     X_aug[i] = transform.rotate(img, angle=np.random.uniform(-20, 20)) 
    return X_aug 

我通过我的np.ndarray数据集(34799, 32, 32, 3)图像的给它。如果图像是灰度,则该功能的输出是正确的。但是,通过RGB图像后X_aug包含全零。


我已经试过如下:

  • 首先,我如果功能检查transform.rotate(...)作品后,我通过RGB图像给它。
  • 然后我认为问题出在:X_aug[i] = transform.rotate(img, angle=np.random.uniform(-20, 20))并尝试了不同的copy方法。

这些都没有帮助,我不知道我做错了什么。

回答

0

您的代码适合我。它在X_aug中为任何类型的输入数组生成非零值。

试试这个:

def rotate_20rand(X): 
    return np.stack((transform.rotate(img, angle=np.random.uniform(-20, 20)) for img in X)) 
+0

谢谢@RomanMindlin,此代码对我的作品。但是我仍然不明白原始函数有什么问题。你也使用Python 3吗? 我尝试用'X_aug = copy.deepcopy(X)'替换'X_aug'初始化代码,但是在循环内部的赋值操作之后''X_aug'的所有条目都变为零。 –

+0

我已经用Python 3.5.2测试了你的代码,numpy == 1.13.1,scikit-image == 0.13.1。可能你在代码的另一部分有问题,很可能是使用变量名称空间。请不要忘记接受答案) –