你能帮我解决这个错误吗?
a
和 b
是 2-double 数组,由行和列定义。 a
是给定矩阵:
cv::resize(a,b,cv::Size(newrows,newcols),0,0,INTER_CUBIC);
我可以编译,但运行时出现错误:
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.10.0-dev) /home/xx/opencv/modules/core/src/matrix_wrap.cpp:72: error: (-215:Assertion failed) 0 \<= i && i \< (int)vv.size() in function 'getMat\_'
代码如下:
std::vector <vector<double>> at,ax;
for(int i=0;i<4;i++) {
vector<double> v11;
for(int j=0;j<4;j++) {
v11.push_back(double(4*i+j));
}
at.push_back(v11);
}
for(int i=0;i<2;i++) {
vector<double> v12;
for(int j=0;j<2;j++) {
v12.push_back(0);
}
ax.push_back(v12);
}
for(int i=0;i<4;i++) {
for(int j=0;j<4;j++) {
cout<<" "<<at[i][j];
}
cout<<endl;
}
cv::resize(at,ax,cv::Size(2,2),0,0,INTER_CUBIC);
for(int i=0;i<2;i++) {
for(int j=0;j<2;j++) {
cout<<" "<<ax[i][j];
}
cout<<endl;
}
结果是:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.10.0-dev) /home/taduong/opencv/modules/core/src/matrix_wrap.cpp:72: error: (-215:Assertion failed) 0 <= i && i < (int)vv.size() in function 'getMat_'
Aborted
你能帮我解决这个错误吗?
问题的根源似乎是 opencv 库本身的错误。
我不确定是否/何时会修复。
但无论如何,我建议使用 opencv (和
cv::resize
)和 cv::Mat
,这是 opencv 的自然矩阵容器。
它也更适合表示 2D 数组,
vector<vector<T>>
,这要归功于连续内存布局,它更高效且缓存友好。以下是如何在您的案例中使用它的示例:
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
// Create and fill input:
cv::Mat at1(4, 4, CV_64FC1);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
at1.at<double>(j, i) = 4. * i + j;
}
}
// Print input:
std::cout << "Input:\n";
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
std::cout << " " << at1.at<double>(j, i);
}
std::cout << std::endl;
}
// Perform resize and create output:
cv::Mat ax1; // no need to initialize - will be done by cv::resize
cv::resize(at1, ax1, cv::Size(2, 2), 0, 0, cv::INTER_CUBIC);
// Print output:
std::cout << "\nOutput:\n";
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
std::cout << " " << ax1.at<double>(j,i);
}
std::cout << std::endl;
}
}
输出:
Input:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Output:
2.03125 4.21875
10.7812 12.9688
旁注:
cv::Mat
元素,请使用 cv::Mat::ptr
获取行指针,而不是使用 cv::Mat::at
访问每个元素。