使用 printf 时 vector<Vec3b> 的格式说明符
Posted
技术标签:
【中文标题】使用 printf 时 vector<Vec3b> 的格式说明符【英文标题】:Format specifier for vector<Vec3b> when using printf 【发布时间】:2014-07-01 05:45:04 【问题描述】:我想获取 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 中为 WHAT 放置什么?即这里的格式说明符是什么?
【问题讨论】:
你想要c方案还是c++方案? @Ben 基本上我想对图像数据进行 FFT。 FFT 例程基于 C,需要一个指针。 参见***.com/questions/12069623/printf-and-custom-class,因为 Vec 没有内置operator const char *()
,所以即使作为 printf 的第一个参数也不能传递它。如果您必须使用 printf(为什么?),您可以从 Vec 继承并提供 operator const char *()
,但这与链接问题中讨论的一样非常有限。
@gpuguy,而不是 3rd party fft-lib (in c) ,你可以试试 opencv 的dft。另外,考虑到您的原始图像,这只是灰度问题,对吗? (不是彩色像素)
【参考方案1】:
没有直接的方法可以做到这一点。 opencv中有重载的
您必须手动完成所有操作:
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");
【讨论】:
【参考方案2】:您不能像这样将它与 printf 一起使用,因为它不是标准类型。我认为您应该编写一个函数来为您打印这种类型,例如:
void printForMe(vector<Vec3b> buf)
for (auto &vec : buf)
cout << vec[0] << " " << vec[1] << " " vec[2] << std::endl;
然后您还可以编辑格式的显示方式。
如果 OpenCv 的 MatX
类有 operator<<
的重载,这会更容易,但它没有,所以你需要自己做这个。
【讨论】:
以上是关于使用 printf 时 vector<Vec3b> 的格式说明符的主要内容,如果未能解决你的问题,请参考以下文章
vector<vector<int>>vec1 和 vector<int>vec2[100] 有啥区别? [关闭]