错误 opencv 错误断言失败 (p [-1] <= 2) 是什么意思以及如何处理它?

What does the error opencv error assertion failed (p [-1] <= 2) mean and how to deal with it?

本文关键字:错误 意思 是什么 何处理 处理 失败 断言 opencv lt      更新时间:2023-10-16

我正在尝试使用OpenCV库将Mathlab代码转换为加号。

在下面的行上:

resize (sig_temp, sig_temp, 
Size (sig_temp.size [0] / 2 + sig_temp.size [0]% 2, 
sig_temp.size [1] / 2 + sig_temp.size [1]% 2));

程序出现错误:

opencv error assertion failed (p[-1] <= 2) in cv::Matsize:: operator ()

以前的错误(dims <= 2, top / bottom / right / left> = 0)非常明显,因此很明显尺寸不应超过两个,图像的边界应该是非负的。我立即不明白 p [-1] 是什么意思以及为什么它不应该超过两个(但我想这里的东西再次与层相连)。

sig_temp - 三通道矩阵。

我所知:https://github.com/opencv/opencv/pull/8718/filesMatSize::p 是维度大小的数组。

p[-1] 为您提供数量维度。 也许您的sig_temp矩阵是 3 维或更多?

我的建议是使用其重新塑造的方法将sig_temp定义为

cv::Mat3b sig_temp;

cv::Size int width, int height作为参数。Mat::size的第 0 个元素是高度。

cv::Mat img = imread("image.jpg");
cout<<img.size()<<endl; // This line prints [columns x rows]
cout<<img.size[0]<<endl; // This line prints the rows
cout<<img.size[1]<<endl; // This line prints the columns

所以在这一行中:

Size (sig_temp.size [0] / 2 + sig_temp.size [0]% 2, 
sig_temp.size [1] / 2 + sig_temp.size [1]% 2)

您将int height, int width作为参数提供给cv::Sizeint width, int height作为参数。

您应该使用行和列以避免混淆。

Size (sig_temp.cols / 2 + sig_temp.cols% 2, 
    sig_temp.rows / 2 + sig_temp.rows% 2)