当前位置: 首页 > 面试题库 >

将Numpy数组转换为OpenCV数组

仲皓君
2023-03-14
问题内容

我正在尝试将代表黑白图像的2D Numpy数组转换为3通道OpenCV数组(即RGB图像)。

基于代码示例和文档,我正尝试通过Python执行此操作,例如:

import numpy as np, cv
vis = np.zeros((384, 836), np.uint32)
h,w = vis.shape
vis2 = cv.CreateMat(h, w, cv.CV_32FC3)
cv.CvtColor(vis, vis2, cv.CV_GRAY2BGR)

但是,对CvtColor()的调用将引发以下cpp级异常:

OpenCV Error: Image step is wrong () in cvSetData, file /build/buildd/opencv-2.1.0/src/cxcore/cxarray.cpp, line 902
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd/opencv-2.1.0/src/cxcore/cxarray.cpp:902: error: (-13)  in function cvSetData

Aborted

我究竟做错了什么?


问题答案:

您的代码可以固定如下:

import numpy as np, cv
vis = np.zeros((384, 836), np.float32)
h,w = vis.shape
vis2 = cv.CreateMat(h, w, cv.CV_32FC3)
vis0 = cv.fromarray(vis)
cv.CvtColor(vis0, vis2, cv.CV_GRAY2BGR)

简短说明:

  1. np.uint32数据类型不受OpenCV的支持(它支持uint8int8uint16int16int32float32float64
  2. cv.CvtColor无法处理numpy数组,因此必须将两个参数都转换为OpenCV类型。cv.fromarray执行此转换。
  3. 的两个参数cv.CvtColor必须具有相同的深度。因此,我将源类型更改为32bit float以匹配destination。

我也建议您使用较新版本的OpenCV python API,因为它使用numpy数组作为主要数据类型:

import numpy as np, cv2
vis = np.zeros((384, 836), np.float32)
vis2 = cv2.cvtColor(vis, cv2.COLOR_GRAY2BGR)


 类似资料:
  • 问题内容: 注意: 这要求与通常的元组到数组的转换相反。 我必须将一个参数传递给(包装的c ++)函数作为嵌套元组。例如,以下作品 而以下 不 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该阵列的尺寸始终为2xN,这可能会很大。 有没有简单的方法可以将其转换为元组?我知道我可以循环遍历,创建一个新的元组,但是如果numpy数组提供了一些不错的访问权限,我会更喜欢。 如果不可能如我所愿

  • 问题内容: 我想将图像转换为NumPy数组再转换为PySide QPixmap,因此可以显示它(在PySide UI中编辑:)。我已经找到了此工具:qimage2ndarray,但它仅适用于PyQt4。我试图对其进行更改以使其能够与PySide一起使用,但是我将不得不更改该工具的C部分,并且我没有使用C的经验。我该怎么做?或者有其他选择吗? 问题答案: 一种选择是仅使用PIL库。 您可以在http

  • 问题内容: 我正在尝试将二维数组转换为具有命名字段的结构化数组。我希望2D数组中的每一行成为结构化数组中的新记录。不幸的是,我没有尝试过以我期望的方式工作。 我从开始: 我想转换为以下形式: 我尝试过的 这两种方法都尝试将myarray中的每个条目转换为具有给定dtype的记录,因此将插入多余的零。我不知道如何获取它以将每一行转换为一条记录。 另一尝试: 这次不执行任何实际转换。内存中的现有数据只

  • 我的df中有3列 如何将其转换为矩阵?我试过了 但这并没有给出一个矩阵

  • 问题内容: 假设我有一个彩色图像,这自然将由python中的3维数组表示,例如形状(nxmx 3),并将其称为img。 我想要一个新的二维数组,将其称为“ narray”,其形状为(3,nxm),以便该数组的每一行分别包含R,G和B通道的“扁平化”版本。而且,它应该具有这样的属性:我可以通过类似以下方法轻松地重建任何原始通道 问题是如何从“ img”构造“ narray”?简单的img.resha

  • 问题内容: 假设我有; 我尝试转换; 我现在正在vstack上通过迭代来解决它,但是对于特别大的LIST来说确实很慢 您对最佳有效方法有何建议? 问题答案: 通常,您可以沿任意轴连接整个数组序列: 但你 也 必须对列表中的形状和每个阵列的维度担心(用于2维3x5的输出,你需要确保它们都是2维正由-5阵列的话)。如果要将一维数组连接为二维输出的行,则需要扩展其维数。 正如Jorge的答案所指出的那样