使用 printf 时矢量的格式说明符<Vec3b>
Format specifier for vector<Vec3b> when using printf
我想获取,比如说,第二个像素然后使用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<<
的重载,这将更容易,但它没有,所以你需要自己做这个。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 左角支架解释为操作员&lt;而不是模板参数
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- 超载操作员&lt;&lt; - 必须是二进制操作员