OpenCV在Python中的checkVector断言错误

2024-05-23 15:34:24 发布

您现在位置:Python中文网/ 问答频道 /正文

OpenCV在Python中使用Numpy数组作为输入。这抽象了底层C++阵列的许多特性。在

在OpenCV(CV2.GETAFIONIZORT)中的所有函数的旁边对C++中的输入数据进行检查:

inputMat.checkVector(3, CV_32F) == 3

Python中的断言经常会出现不正确的错误:

^{pr2}$

究竟是什么导致了这些错误,以及如何解释它们?在


Tags: 数据函数numpy错误数组特性断言cv2
1条回答
网友
1楼 · 发布于 2024-05-23 15:34:24

我现在要回答我自己的问题了,因为我浪费了大约三个小时的时间在StackOverflow上寻找答案。在

函数cv::Mat::checkVector()检查三件事:

  1. 第一个参数指定的数组中的列数。在
  2. 在第二个参数中由枚举指定的数据类型。当在Python中看到错误时,枚举值已经被解析(例如,CV_32faka float32为5)。可能的值为:

    CV_8U 0 CV_8S 1 CV_16U 2 CV_16S 3 CV_32S 4 CV_32F 5 CV_64F 6 CV_USRTYPE1 7Source

  3. 第三个不太明显的是检查输入是否连续。这由第三个参数指定,默认值为true。因此,从Python中的断言错误中看不到这个错误。在

要检查numpy数组的连续布局,可以查看np.ndarray.flags参数。Numpy数组通常是C-连续的,但是可以通过切片等操作变得不连续:

>> x = np.zeros((10, 68, 3))
>> x.flags
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False
>> x[:, [33, 36, 45]].flags
  C_CONTIGUOUS : False
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True

在np.ndarray.复制()函数可以通过给切片数组指定参数order='C',使其再次连续。在

相关问题 更多 >