Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中OpenCV checkVector的断言错误_Python_Numpy_Opencv_Affinetransform - Fatal编程技术网

Python中OpenCV checkVector的断言错误

Python中OpenCV checkVector的断言错误,python,numpy,opencv,affinetransform,Python,Numpy,Opencv,Affinetransform,OpenCV在Python中使用Numpy数组作为输入。这篇文章抽象了C++基础数组的许多特性。 在OpenCV中的所有函数的旁边,例如CV2.GETAFIONTION,对C++中的输入数据进行检查: inputMat.checkVector(3, CV_32F) == 3 由此产生的断言错误通常很神秘,有时在Python中无法正确捕获: (-215:Assertion failed) src.checkVector(2, 5) == 3 && dst.checkVector(

OpenCV在Python中使用Numpy数组作为输入。这篇文章抽象了C++基础数组的许多特性。

在OpenCV中的所有函数的旁边,例如CV2.GETAFIONTION,对C++中的输入数据进行检查:

inputMat.checkVector(3, CV_32F) == 3
由此产生的断言错误通常很神秘,有时在Python中无法正确捕获:

(-215:Assertion failed) src.checkVector(2, 5) == 3 && dst.checkVector(2, 5) == 3 in function 'cv::getAffineTransform'

到底是什么导致了这些错误以及如何解释它们?

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

该函数检查三件事:

由第一个参数指定的数组中的列数。 第二个参数中枚举指定的数据类型。在Python中看到错误时,枚举值已被解析,例如,CV_32F aka 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 7

第三个也是不太明显的是检查输入是否连续。这由第三个参数指定,该参数默认为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.copy函数可以通过给切片数组赋参数order='C',使其再次连续。

我现在要回答我自己的问题,因为我花了大约三个小时的时间在谷歌上搜索StackOverflow的答案

该函数检查三件事:

由第一个参数指定的数组中的列数。 第二个参数中枚举指定的数据类型。在Python中看到错误时,枚举值已被解析,例如,CV_32F aka 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 7

第三个也是不太明显的是检查输入是否连续。这由第三个参数指定,该参数默认为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.copy函数可以通过为切片数组提供参数order='C'使其再次连续