gpt4 book ai didi

python - 将 Numpy 数组转换为 OpenCV 数组

转载 作者:IT老高 更新时间:2023-10-28 20:27:55 32 4
gpt4 key购买 nike

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

基于 code samplesthe docs我正在尝试通过 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 支持(它支持 uint8, int8, uint16, int16int32float32float64)
  2. cv.CvtColor 无法处理 numpy 数组,因此必须将两个参数都转换为 OpenCV 类型。 cv.fromarray 做这个转换。
  3. cv.CvtColor 的两个参数必须具有相同的深度。所以我将源类型更改为 32 位 float 以匹配目标。

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

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

关于python - 将 Numpy 数组转换为 OpenCV 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7587490/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com