使用printf </vec3b>时,向量<vec3b>的格式说明符

时间:2014-07-01 05:45:04

标签: c++ c opencv

我想获取,让我们在buf中说第二个像素并使用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中放置什么?那格式说明符是什么?

2 个答案:

答案 0 :(得分:5)

没有直截了当的方法。有重载&lt;&lt; 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");

答案 1 :(得分:3)

你不能将它与printf一起使用,因为它不是标准类型。我认为您应该编写一个函数来为您打印此类型,例如:

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

然后,您还可以编辑格式的显示方式。

如果OpenCv的MatX类有operator<<的重载,这会更容易,但事实并非如此,您需要自己制作。