0

このコード スニペットは、ガベージ値を出力します。

cv::Mat_<cv::vec3b>::iterator it = img.begin<cv::vec3b>(),
itEnd = img.end<cv::vec3b>();

for(; it != itEnd; ++it)
   std::cout << (*it)[1] << std::endl;

しかし、これは RGB 値のベクトルを出力します。

std::cout << img.at(100,200);

個々の RGB 値にアクセスしようとすると、ガベージ値が出力されます。

これが起こっている理由は何ですか?

4

1 に答える 1

1

OpenCVについてはわかりませんが、ベクトルの各要素が[221,123,321]などの形式である場合、「、」セパレータに基づいて文字列を個別に分割すると、個々のピクセル値を取得できます。

私が理解しているのはこれです:

 #include<sstream>

 string buf;

 cout<<"Printing elements:"<<endl;

 for(unsigned i=0;i<img.size();i++)
 {
   istringstream is(img[i]);

   while(getline(is, buf, ','))
   {
     if(buf.at(0)=='[')
     {
       buf.erase(0, 1);
     }
     if(buf.at(buf.length()-1)==']')
     {
       buf.erase(buf.length()-1, buf.length());
     }
     cout<<buf<<endl;
   }  
 }

出力

印刷要素:

221

123

321

...

...

于 2013-09-11T10:55:41.133 に答える