使用 printf 时矢量的格式说明符<Vec3b>

Format specifier for vector<Vec3b> when using printf

本文关键字:lt Vec3b gt 说明符 格式 printf 使用      更新时间:2023-10-16

我想获取,比如说,第二个像素然后使用printf:

打印
vector<Vec3b> buf;
/* code that fills buf , I used push_back */
printf("%WHAT", buf[1])

我可以像这样使用cout打印这些值:

    LineIterator it(img, Point(1,1), Point(20,20), 8);
    vector<Vec3b> buf;   
    for(int i=0; i<it.count; i++)
    {
    buf.push_back( Vec3b(*it) ); /* code that fills buf , I used push_back */
    it++;
    }
    cout << Mat(buf[1]) << endl;

但是我只想用printf来做这个。

cout语句给出了三个值,分别对应于R、G和b。

我应该在我的printf中放置什么?也就是说,这里的格式说明符是什么?

没有直接的方法。有重载<<操作符在opencv中,但没有c解决方案(为什么你甚至想要这个?)

你必须手动完成:

for(size_t i=0; i<buf.size(); i++)
{
   Vec3b v = buf[i];
   printf("[%d %d %d] ", v[0], v[1], v[2] );
}
printf("n");

你不能像那样使用printf,因为它不是标准类型。我认为你应该写一个函数来打印这种类型,比如像这样:

void printForMe(vector<Vec3b> buf)
{
    for (auto &vec : buf)
    {
        cout << vec[0] << " " << vec[1] << " " vec[2] << std::endl;
    }
}

你还可以编辑你的格式的显示方式。

如果OpenCv的MatX类有operator<<的重载,这将更容易,但它没有,所以你需要自己做这个。