【问题标题】:Value Error in image processing图像处理中的值错误
【发布时间】:2017-07-19 10:24:40
【问题描述】:

我正在对数据库中的图像进行白化。由于代码庞大,我只给出代码中出现错误的函数-

def sample_images_raw(fname):
    image_data = cv2.imread(fname)

    patch_size = 12
    n_patches = 10000
    image_size = image_data.shape[0]
    n_images = image_data.shape[2]

    patches = np.zeros(shape=(patch_size * patch_size, n_patches))

    for i in range(n_patches):
        image_id = np.random.randint(0, n_images)
        image_x = np.random.randint(0, image_size - patch_size)
        image_y = np.random.randint(0, image_size - patch_size)

        img = image_data[:, :, image_id]
        patch = img[image_x:image_x + patch_size, image_y:image_y + patch_size].reshape(-1)
        patches[:, i] = patch

    return patches

我收到的错误信息是这样的 -

Traceback (most recent call last):
  File "/home/moron/Project/pca/pca_gen.py", line 37, in <module>
    x = sample_images_raw(sys.argv[1])
  File "/home/moron/Project/pca/sample_images.py", line 70, in sample_images_raw
    patches[:, i] = patch

ValueError: could not broadcast input array from shape (0) into shape (144)

我尝试将变量 patch_size 的值更改为 6,但出现以下错误 -

Traceback (most recent call last):
  File "/home/moron/Project/pca/pca_gen.py", line 37, in <module>
    x = sample_images_raw(sys.argv[1])
  File "/home/moron/Project/pca/sample_images.py", line 70, in sample_images_raw
    patches[:, i] = patch

ValueError: could not broadcast input array from shape (30) into shape (36)

我又走了一步,将值更改为 1。编译器也又走了一步,出现了以下错误 -

Traceback (most recent call last):
  File "/home/moron/Project/pca/pca_gen.py", line 37, in <module>
    x = sample_images_raw(sys.argv[1])
  File "/home/moron/Project/pca/sample_images.py", line 70, in sample_images_raw
    patches[:, i] = patch

ValueError: could not broadcast input array from shape (0) into shape (1)

我正在处理的数据库是成熟的数据库,例如 orl faces 和 faces 95。

任何人都可以解释编译器这种奇怪行为的原因并更正这段代码。

【问题讨论】:

  • 请始终包含至少一个完整的错误跟踪调试问题。无法判断哪个语句导致了错误。
  • 所有图像都是正方形的吗? image_data.shape 是什么?
  • @DanielF 它的尺寸是 92*112。所以不是。但有必要吗?
  • @DanielF 我还包括了完整的错误
  • 你使用image_size 来计算 x 和 y。

标签: python opencv numpy image-whitening


【解决方案1】:

看起来你搞砸了图像尺寸。

替换

image_size = image_data.shape[0]

image_width = image_data.shape[0]  # These might be the other
image_height = image_data.shape[1] # way round with width == 1

然后替换这些行

image_x = np.random.randint(0, image_size - patch_size)
image_y = np.random.randint(0, image_size - patch_size)

image_x = np.random.randint(0, image_width - patch_size)
image_y = np.random.randint(0, image_height - patch_size)

您当前的代码正在尝试访问图像尺寸之外的切片(除非宽度 == 高度),从而为您提供一个长度为 0 的数组。

【讨论】:

    猜你喜欢
    • 2016-07-20
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多