【问题标题】:OpenCV unsupported depth of input image, 'depth' is 3 (CV_16S) when using cv2.cvtColorOpenCV 不支持输入图像的深度,使用 cv2.cvtColor 时“深度”为 3 (CV_16S)
【发布时间】:2021-11-24 01:50:07
【问题描述】:

我正在读取一个视频文件并将其转换为一个 numpy 数组。

像这样:

video= np.array(skvideo.io.vread(folder + "video.avi"), dtype=np.int16)

稍后我访问第一帧并将其保存在 img 下

img = video[0]

形状现在有 3 个通道:

389, 516, 3

转灰度时:

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

我收到此错误:

error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.simd_helpers.hpp:94: error: (-2:Unspecified error) in function 'cv::impl::{anonymous}::CvtHelper<VScn, VDcn, VDepth, sizePolicy>::CvtHelper(cv::InputArray, cv::OutputArray, int) [with VScn = cv::impl::{anonymous}::Set<3, 4>; VDcn = cv::impl::{anonymous}::Set<1>; VDepth = cv::impl::{anonymous}::Set<0, 2, 5>; cv::impl::{anonymous}::SizePolicy sizePolicy = (cv::impl::<unnamed>::SizePolicy)2u; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'
> Unsupported depth of input image:
>     'VDepth::contains(depth)'
> where
>     'depth' is 3 (CV_16S) 

视频和图像显示正常。 我实际上遇到了这个错误,因为我想绘制直方图,但在传递第一帧时我得到了一个没有文档的错误。

我是否可以使用cv2.VideoCapture? 我不明白这是怎么回事,因为它是一个非常好的 numpy 数组。

感谢您的帮助!

【问题讨论】:

  • 尝试使用dtype=np.uint8作为视频数组,opencv不支持所有数据类型

标签: python numpy opencv scikit-image


【解决方案1】:

cvtColor投诉,因为数据有错误dtype

您的数据有 dtype int16(有符号整数)。

cvtColor 仅接受 uint8uint16float32。在 OpenCV 用语中,它们是 CV_8UCV_16UCV_32F,它们的数值为 0, 2, 5

解决方案:使用支持的 dtype。似乎skvideo.io.vread 已经返回uint8 中的数据。把多余的np.array(..., dtype=np.int16) 去掉就行了。

【讨论】:

  • 谢谢 Christoph 我会试试的,@Dominik Ficek 也很有效。如果我将 dtype 更改为 int16,我只能将上述内容与另一个库一起使用,这就是它存在的原因。
【解决方案2】:

奇怪的是,如果我通过视频捕获读取视频然后遍历帧,它确实有效。

所以上面的一个解决方案是

video= cv2.VideoCapture(folder + 'video.avi')
is_true, frame = video.read()

然后像以前一样做剩下的事情。

如果有人能解释为什么(数组之间的区别是什么)那就太好了。

【讨论】:

  • 是的,它有效,因为它不会转换成愚蠢的东西。
  • 稍后转换作品,这就是我的意思。 @berak
  • 好吧,您之前的转换是错误的(看起来像“盲目复制粘贴”)
  • @berak 我当然会从文档、SO 和其他地方复制并粘贴(尽管我只能睁着眼睛,你试过闭着眼睛吗?),正如代码示例 1 所示:1 与我使用的文档的对应关系(否则我链接)。
  • 结论仍然是:你错误地添加了一个(坏的)演员,却不知道(或问)为什么
猜你喜欢
  • 2019-08-06
  • 2021-07-28
  • 2019-08-03
  • 2020-05-05
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多