Python ValueError: Expected 1D or 2D array, got 3D array instead

Python计算相机响应函数并存储至txt文件时发生错误,源代码如下:

# 估计相机响应函数曲线
calibrateDebevec = cv2.createCalibrateDebevec()
responseDebevec = calibrateDebevec.process([img1, img2, img3], times=np.array([1, 2, 4], dtype=np.float32))
np.savetxt('response_curve.txt', responseDebevec)

显示错误:

Traceback (most recent call last):
  File "D:\HApp\Deep\Pycharm-Community\PycharmProjects\pythonProject17\RANDOM_test1111\matttt.py", line 27, in <module>
    np.savetxt('response_curve.txt', responseDebevec)
  File "<__array_function__ internals>", line 180, in savetxt
  File "D:\HApp\Deep\anaconda3\envs\python38_64\lib\site-packages\numpy\lib\npyio.py", line 1397, in savetxt
    raise ValueError(
ValueError: Expected 1D or 2D array, got 3D array instead

这个错误是因为 np.savetxt() 函数只接受1D或2D数组作为输入,而 responseDebevec 是一个3D数组。

responseDebevec 是一个由多个曝光时间下的每个像素的响应值组成的数组,它的维度是(图像高度,图像宽度,曝光时间数目)。

要将 responseDebevec 保存为文本文件,你需要将其转换为2D数组。可以使用 np.reshape() 函数将 responseDebevec 转换为2D数组。修改代码如下:

# 将 responseDebevec 转换为2D数组
response_2d = responseDebevec.reshape(-1, responseDebevec.shape[-1])

# 将2D数组保存为文本文件
np.savetxt('response_curve.txt', response_2d)

结果正确。

D:\HApp\Deep\Pycharm-Community\PycharmProjects\pythonProject17\RANDOM_test1111\matttt.py 

Process finished with exit code 0

成功获得所需存储的txt文件。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值