CvMat: размеры входных аргументов не совпадают

Мой код открывает изображение с дорожными знаками, обнаруживает их, масштабирует до указанного размера и затем помещает их в матрицу.

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);
}

Все работает правильно, когда обнаружен только один дорожный знак или на изображении найдены очень похожие размеры. Если размеры найденных признаков отличаются, то я получаю следующую ошибку:

Ошибка: размеры входных аргументов не совпадают <> в неизвестной функции файл …… \ modules \ core \ src \ matrix.cpp, строка 598 »

Для меня очень важно иметь эти знаки в матрица.

0

Решение

Страница справки для резюме :: Mat :: push_back Метод говорит:

Методы добавляют один или несколько элементов внизу матрицы. Oни
эмулировать соответствующий метод векторного класса STL. Когда элем
Мат, его тип и количество столбцов должны быть такими же, как в
контейнерная матрица.

Итак, чтобы добавить несколько изображений в 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));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]