在OpenCV中保存运行时更新的映像

时间:2014-01-08 10:53:28

标签: c++ opencv image-processing

我想在运行时使用imshow()更新显示图片:说我想运行角点检测算法,然后显示角落在同一图像上 - 就像在MATLAB figure plot(), hold plot()中一样 - hold 关键字保存上一个图像/图形并在同一图上启用新图。

这可能与OpenCV有关吗?如果是,我该怎么做?

谢谢

2 个答案:

答案 0 :(得分:4)

在C ++中,您无需保留它即可更新绘图。您只需要在图像上绘制想要的内容,然后imshow图像。你去吧。


请查看here中的以下示例:

int Displaying_Big_End( Mat image, char* window_name, RNG rng )
{
  Size textsize = getTextSize("OpenCV forever!", CV_FONT_HERSHEY_COMPLEX, 3, 5, 0);
  Point org((window_width - textsize.width)/2, (window_height - textsize.height)/2);
  int lineType = 8;

  Mat image2;

  for( int i = 0; i < 255; i += 2 )
  {
    image2 = image - Scalar::all(i);
    putText( image2, "OpenCV forever!", org, CV_FONT_HERSHEY_COMPLEX, 3,
           Scalar(i, i, 255), 5, lineType );

    imshow( window_name, image2 );
    if( waitKey(DELAY) >= 0 )
      { return -1; }
  }

  return 0;
}

enter image description here

注意imshow( window_name, image2 ),我们不做任何事情来保存图像,只需使用循环在图像上逐步绘制(通过putText())。图像将相应地动态更新。

答案 1 :(得分:2)

OpenCV中没有hold的概念 基本上,cv::imshow()只会使用它获得的任何图像更新窗口。

要“叠加”,您实际上需要创建一个新图像(或重复使用现有图像),在此新图像上绘制和/或更新它,例如检测到您的角落,然后使用此更新后的图片再次致电imshow()