2024-05-23 15:34:24 发布
网友
OpenCV在Python中使用Numpy数组作为输入。这抽象了底层C++阵列的许多特性。在
在OpenCV(CV2.GETAFIONIZORT)中的所有函数的旁边对C++中的输入数据进行检查:
inputMat.checkVector(3, CV_32F) == 3
Python中的断言经常会出现不正确的错误:
究竟是什么导致了这些错误,以及如何解释它们?在
我现在要回答我自己的问题了,因为我浪费了大约三个小时的时间在StackOverflow上寻找答案。在
函数cv::Mat::checkVector()检查三件事:
在第二个参数中由枚举指定的数据类型。当在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
CV_8U 0 CV_8S 1 CV_16U 2 CV_16S 3 CV_32S 4 CV_32F 5 CV_64F 6 CV_USRTYPE1 7
要检查numpy数组的连续布局,可以查看np.ndarray.flags参数。Numpy数组通常是C-连续的,但是可以通过切片等操作变得不连续:
np.ndarray.flags
>> 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',使其再次连续。在
order='C'
我现在要回答我自己的问题了,因为我浪费了大约三个小时的时间在StackOverflow上寻找答案。在
函数cv::Mat::checkVector()检查三件事:
在第二个参数中由枚举指定的数据类型。当在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 7
Source要检查numpy数组的连续布局,可以查看
np.ndarray.flags
参数。Numpy数组通常是C-连续的,但是可以通过切片等操作变得不连续:在np.ndarray.复制()函数可以通过给切片数组指定参数
order='C'
,使其再次连续。在相关问题 更多 >
编程相关推荐