【问题标题】:Showing indexed images in for loop在 for 循环中显示索引图像
【发布时间】:2014-03-02 19:25:24
【问题描述】:

我有一个场景,我必须在 for 循环中显示图像数量。请看代码。

我想分别分析所有检测到的霍夫线。所以我试图提取图像中检测到的每条线。 所以我会得到与检测到的行数一样多的图像。

for ( int i = 0;i<lines.size();i++)
{
Vec4i draw = lines[i];
line(vMat[i],Point(draw[0],draw[1]),Point(draw[2],draw[3]),Scalar(0,0,255),1,CV_AA);
imshow("Lines",vMat[i]);
}

由于俗称“Lines”,我只得到最后检测到的线条图像。

可以在imshow中添加迭代器信息吗?

我尝试使用字符串数组。但是concatenating 带有字符串的整数(向量的索引)对我来说似乎很困难(添加'boost'库等等)。

我的问题有什么简单的替代方法吗?

谢谢, 卡提克

【问题讨论】:

  • 我无法理解您的问题。所以你想在图像中显示文本?
  • 所以你的循环多次分配给“Lines”,并且只包含一个? imshow() 究竟做了什么?
  • 也许您想在imshow 之后添加cv::waitKey();,以便您有时间实际检查imshow 显示的内容。
  • @ChronoTrigger:我想通过将索引号附加到图像窗口来显示更多图像,以便我可以记下典型(所需)行的索引号。这对我来说只在特定的行上工作会很方便。否则,我必须像 "draw = Lines[0]", imshow("Lines[0]") 那样输入并手动输入所有行数。更准确地说是“imshow("Lines"+i,vMat[i])"。但这行不通。我希望我说清楚了。如果没有,请问我,我已经准备好澄清它了。
  • @JonPall,我希望我的循环将迭代器附加到字符串“Lines”。所以我得到了各种图像,如“Lines[0]”、“Lines[1]”、“Lines[2]”等等。我的问题也可以换一种说法。 “我们如何从一个图像矢量中显示多个图像?”我希望我现在说清楚了。还是不行?

标签: c++ opencv image-processing mat imshow


【解决方案1】:

有没有可能在imshow中添加迭代器信息?

imshow("线条",vMat[i]);

您可以考虑添加 2 行:

{ 
  std::stringstream ss; 
  ss << "Lines[" << i << "] "; 
  imshow(ss.str().c_str(), vMat[i]); 
}

我通常添加大括号以释放“ss”标签,并清理字符串流。

【讨论】:

  • 哇。那行得通。对代码的解释对我理解很有帮助。
  • std::stringstream 的工作方式与任何其他流一样。它允许您将格式化的输出(在这种情况下)用于 ss。结果在内部缓冲,并且可以使用 ss.str() 访问缓冲(作为 std::string)。这又可以使用 c_str() 访问(作为 c 字符串,即以 null 结尾的字符串)。 std::stringstream 还支持格式化提取。它们也有 std::istringstream 和 std::ostringstream 两种形式。
猜你喜欢
  • 1970-01-01
  • 2011-12-07
  • 2021-04-23
  • 2021-07-09
  • 2012-05-25
  • 2020-08-23
  • 2019-10-08
  • 2017-01-27
  • 1970-01-01
相关资源
最近更新 更多