2017-04-04 3 views
0
std::vector<cv::Mat1f> mat = std::vector<cv::Mat1f>(10,cv::Mat1f::zeros(1,10)); 
mat[0]+=1; 
for(size_t i=0;i<mat.size();i++) 
    std::cout<<mat[i]<<std::endl; 

그들 사이에 연결되어 그리고 그것은 인쇄 :벡터 :: 매트

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 

가 어떻게이 문제를 방지 할 수 있습니까? 벡터 초기화가 인라인 인 것이 매우 중요합니다.

답변

0

당신은 그렇게 할 수 없습니다. vector 생성자는 헤더 만 복사하고 데이터는 복사하지 않는 Mat 복사본 생성자를 사용합니다. 예 :

std::vector<cv::Mat1f> mat(10); 
for (size_t i = 0; i < mat.size(); i++) { 
    mat[i] = cv::Mat1f(1, 10, 0.f); 
} 

나 :

cv::Mat1f m = cv::Mat1f(1, 10, 0.f); 
std::vector<cv::Mat1f> mat(10); 
for (size_t i = 0; i < mat.size(); i++) { 
    mat[i] = m.clone(); 
} 

나 :

std::vector<cv::Mat1f> mat(10); 
std::generate(mat.begin(), mat.end(), []() {return cv::Mat1f(1, 10, 0.f); }); 

나 :

cv::Mat1f m = cv::Mat1f(1, 10, 0.f); 
std::vector<cv::Mat1f> mat(10); 
std::generate(mat.begin(), mat.end(), [&m]() {return m.clone(); }); 
명시 적으로 어떻게 든 clone()를 사용하거나 새로운 매트릭스 매번 작성해야
+0

답변 해 주셔서 감사합니다. 행 단위 반복자가 있습니까? 그렇지 않다면 어떻게 구현할 수 있습니까? – justHelloWorld

+0

"행 단위"반복자 란 무엇을 의미합니까? – Miki

+0

나는 그것을 위해 또 다른 질문을 할 것이다. 나는 그것이 내게 좋은 행동이 아니라고 생각한다. – justHelloWorld