Я пытаюсь написать код, который использует OpenCV, чтобы сначала преобразовать видео, кадр за кадром в его цветность g, g, а затем сделать это в гистограмму для сравнения. Тем не менее, у меня возникают некоторые проблемы, когда некоторые операции не разрешаются на векторах или матрицах (и наоборот).Векторный индекс Out Of Range opencv C++
Mat src, res, out, hsv_vid;
vector<Mat> spl;
Mat spl_r, spl_g, spl_b;
Mat r_chroma, g_chroma, frame_chroma;
for(;;){
cap1 >> src; //read video frame into src matrix
if (src.empty()) break;
//extract channels
split(src, spl);
spl_r = spl[2];
spl_g = spl[1];
spl_b = spl[0];
//convert whole frame to chromaticity
r_chroma = spl_r/(spl_r + spl_g + spl_b);
g_chroma = spl_g/(spl_r + spl_g + spl_b);
//convert matrix to vector
vector<vector<Mat>> r_chroma_vec;
for (int i = 0; i < r_chroma.rows; i++) {
vector<Mat> row;
r_chroma.row(i).copyTo(row);
r_chroma_vec.push_back(row);
}
vector<vector<Mat>> g_chroma_vec;
for (int i = 0; i < g_chroma.rows; i++) {
vector<Mat> row;
g_chroma.row(i).copyTo(row);
g_chroma_vec.push_back(row);
}
merge(r_chroma_vec, frame_chroma);
merge(g_chroma_vec, frame_chroma);
} //end for(;;)
//disp chromaticity test img
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION); //use .PNG compression
compression_params.push_back(9);
try { imwrite("ChromaTest.png", frame_chroma, compression_params); } //write output matrix to file
catch (runtime_error& ex) { return -2; }
Если я хочу, чтобы иметь возможность сделать Деление & дополнения, чтобы получить мою цветность тогда r_chroma & g_chroma должен быть матрицами, то я не могу объединить их. Если у меня есть r_chroma & g_chroma как векторы, то я могу объединить их, но я не могу выполнять математические операции над ними.
Есть ли способ слить() 2 матрицы, или я об этом ошибаюсь? Я был бы признателен, если бы кто-нибудь мог указать мне в правильном направлении.
Спасибо за чтение!
[изменить]: Добавлена матрица -> векторное преобразование, чтобы сделать возможным объединение в вывод матрицы.
'Vector Подстрочный Out Of Range' Это означает, что вы обращаетесь к записи недоступный в векторе. Если вы использовали массивы, произошла бы одна и та же ошибка (но была бы авария или тишина из среды выполнения). Так что это действительно не проблема 'std :: vector'. – PaulMcKenzie
@PaulMcKenzie Я еще не запускал его. VS2012 просто дает мне красные подчеркивания, потому что некоторые операции не допускаются с помощью матриц/векторов (т. Е. Слияния). Но вы говорите, что существует ошибка границ с spl []? – user1846359
Может быть, это только я, но у этого цикла есть замкнутая скобка? Возможно, вы должны показать весь код, а не просто фрагмент. –