OpenCV를 사용하여 비디오를 r, g 색도로 프레임 단위로 변환 한 다음 비교를 위해 히스토그램으로 변환하는 코드를 작성하려고합니다. 그러나 벡터 또는 행렬에 허용되지 않는 일부 연산에 문제가 있습니다 (반대의 경우도 마찬가지입니다).벡터 첨자가 범위를 벗어났습니다. 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; }
내가 & g_chroma이 행렬해야 r_chroma 다음 내 색도를 얻을 수있는 부문을 & 추가 할 수 있기를 원한다면, 내가 그들을 병합 할 수 없습니다. 벡터로 r_chroma & g_chroma가 있으면 병합 할 수는 있지만 수학 연산을 수행 할 수 없습니다.
2 개의 행렬을 병합 할 수있는 방법이 있습니까? 아니면이 방법이 잘못 될까요? 누군가가 올바른 방향으로 나를 가리킬 수 있다면 고맙겠습니다.
읽어 주셔서 감사합니다.
[편집] : 매트릭스 -> 벡터 변환을 추가하여 매트릭스 출력 병합을 가능하게했습니다.
'Range'의 벡터 첨자 아웃이 당신이 벡터의 범위를 벗어날 항목에 액세스하는 것을 의미한다. 배열을 사용했다면 같은 오류 (런타임에서 충돌이나 침묵)가 발생했을 것입니다. 그래서 그것은'std :: vector' 문제가 아닙니다. – PaulMcKenzie
@PaulMcKenzie 아직 그것을 실행하지 않았습니다. 일부 작업은 행렬/벡터 (예 : 병합)에서 허용되지 않기 때문에 VS2012는 단지 빨간색 밑줄을 제공합니다. 하지만 spl []에 경계 오류가 있다고 말하는 것입니까? – user1846359
어쩌면 그것의 다만 저, 그러나 이것을위한 루프는 닫는 부류가 있는가? 아마도 스 니펫 대신 모든 코드를 표시해야 할 것입니다. –