【问题标题】:difficulty in reshaping a numpy array while working with images处理图像时难以重塑 numpy 数组
【发布时间】:2020-11-16 23:53:23
【问题描述】:

在为数字识别模型创建 GUI 时,我正在使用 openCV 和 numPy 处理图像。我有点卡在我遇到的这种情况,比如说一个形状为(8,8,3)的图像。我想把它做成 (8,8) 的形状,这样我就可以把它输入到我的分类器模型中,这样它就可以对其进行分类。采取这种方式,我希望第三个维度(即 3)被丢弃。有人可以指导我完成这个吗? 我还为我收到错误的同一场景附加了代码 sn-p:

import cv2 as cv
import numpy as np
img = cv.imread("1.png")
output = cv.imshow("Image: ", img)
cv.waitKey(0)
arr = np.array(img)
new_arr = arr.reshape((8,8))   #trying to reshape it into (8,8)   {don't want that ugly looking '3' at last}
print(arr.shape)               #shape of original image = (8,8,3)
print(arr)
print(new_arr)

而且,我得到的错误是:

Traceback (most recent call last):
  ----> new_arr = arr.reshape((8, 8))
ValueError: cannot reshape array of size 192 into shape (8,8)

有谁知道为什么会出现这个错误?任何帮助将非常感激。提前致谢!

【问题讨论】:

  • Reshape 无法更改数组中的元素总数。您正在尝试“丢弃” 2/3 的数据。 3 并不“丑”——它是颜色维度。

标签: python arrays numpy opencv image-processing


【解决方案1】:

这不能通过 reshape 方法实现。这么看就明白了,reshape 不能将输入数据reshape 变小或变大,因为会丢失数据。

您要求 reshape 方法将 8*8*3 数字重新排列为可以具有 8*8 数字的数据类型,因此,它肯定会抛出错误,因为它没有被编程为丢失信息(在这种情况下为 882 个数字)。

您可以将大小为8*8*3 的图像转换为8*8,而不会丢失信息,方法是将图像转换为灰度。一般8*8*3中的3代表图像中的通道数。灰度图像仅包含1 通道,因此,它是解决您问题的最佳方法。

您可以使用以下代码将图像转换为灰度:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

img 现在的大小为8*8

【讨论】:

    猜你喜欢
    • 2021-09-21
    • 1970-01-01
    • 2020-12-21
    • 2019-09-18
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    相关资源
    最近更新 更多