CvMat:输入参数的大小不匹配
CvMat: sizes of input arguments do not match
我的代码打开带有路标的图像,检测它们,重新缩放到指定的大小,然后将它们放入矩阵中。
vector<vector<Point> > contours;
vector<Vec4i> hierarchy; findContours(maski, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
Mat output1= Mat::zeros(cropImg.rows,cropImg.cols, CV_8UC3);
for(int i = 0; i < contours.size(); i++)
{
drawContours(output1 , contours, i, Scalar(0,0,255), 1, 8, hierarchy );
imshow("kontury z findContours", output1);
}
vector<Rect> boundRect( contours.size() );
Mat drawing1 = Mat::zeros(cropImg.size(), CV_8UC3 );
Mat image_roi = Mat::zeros(Size(1000,1000), CV_8UC3 );
Mat przeskalowane1;
for( int i = 0; i < contours.size(); i++ )
{
double obwod = arcLength(Mat(contours[i]), true);
if(obwod>150)
{
boundRect[i] = boundingRect(Mat(contours[i]));
cout<<"Obwod: "<<obwod<<" Wymiar: "<<boundRect[i].width<<"x"<<boundRect[i].height<<endl;
if(boundRect[i].height > 50 && boundRect[i].width > 50)
{
drawContours( drawing1, contours, i, Scalar(3, 200, 2), CV_FILLED, 8, hierarchy, 0, Point() );
imshow("kontury brane pod uwage przed skalowaniem", drawing1);
Rect mask(boundRect[i].x, boundRect[i].y, boundRect[i].width, boundRect[i].height);
//cout << "#" << i << " rectangle x:" << mask.x << " y:" << mask.y << " " << mask.width << "x" << mask.height << endl;
Mat image_roi = drawing1(mask);
double wys = boundRect[i].height;
double szer = boundRect[i].width;
double skala1 = wys/128;
double y = wys/skala1;
double x = szer/skala1;
resize(image_roi, image_roi, Size(x,y));
przeskalowane1.push_back(image_roi);
} // ERROR in this line
}
}
if(przeskalowane1.cols > 0)
{
cout<<"Przeskalowane: "<<przeskalowane1.cols<<"x"<<przeskalowane1.rows<<endl;
imshow("Przeskalowane", przeskalowane1);
cvMoveWindow("Przeskalowane", 1128, 0);
cvtColor(przeskalowane1, przeskalowane1, CV_BGR2GRAY);
}
当只找到一个路标或在图像中找到的标志与指定的尺寸非常相似时,这一切都可以正常工作。如果找到的标志的大小不同,那么我得到以下错误:
错误:输入参数的大小与未知函数、文件......\模块\核心\src\matrix.cpp,第 598 行中的<>不匹配"
对我来说,在矩阵中拥有这些迹象非常重要。
cv::Mat::p ush_back 方法的帮助页面说:
这些方法将一个或多个元素添加到矩阵的底部。他们 模拟 STL 向量类的相应方法。当 elem 是 垫子,其类型和列数必须与 容器矩阵。
因此,为了 将多个图像添加到przeskalowane1
,您需要将它们重新缩放为相同的宽度(而不是高度(。
Mat image_roi = drawing1(mask);
double wys = boundRect[i].height;
double szer = boundRect[i].width;
double x = 128;
double skala1 = szer/x;
double y = wys/skala1;
resize(image_roi, image_roi, Size(x, y));
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- 为什么使用不匹配的参数调用重载函数仍然有效
- 程序告诉我,即使它们明显匹配,参数也不匹配
- 模板参数'(type)0'与'EnumValue'不匹配
- (C++) 字符串文本与参数列表不匹配
- CvMat:输入参数的大小不匹配
- 参数错误可能与类型不匹配有关?
- 作为模板类型参数,为什么 type[N] 与其专用版本不匹配----模板<类 T>类 S<T[]>
- 模板参数列表中参数 3 处的类型/值不匹配
- 用户定义的构造函数重载与参数超类的重载不匹配
- 模板-模板参数给出神秘的类型/值不匹配
- POSIX(C )参数类型不匹配
- 演绎指南和具有可变参数模板构造函数的可变参数类模板 - 参数包长度不匹配
- 数据不匹配,编译器无法推断模板参数
- Python 参数类型与C++签名不匹配
- 类模板方法的专用化,类型名称是类模板 - 错误:参数处的类型/值不匹配
- C++ 可变参数模板和模板模板参数:错误:模板参数列表中参数 1 处的类型/值不匹配