我想在运行时使用imshow()
和更新显示图片:说我想运行角点检测算法,然后显示角落在同一图像上 - 就像在MATLAB figure plot(), hold plot()
中一样 - hold
关键字保存上一个图像/图形并在同一图上启用新图。
这可能与OpenCV有关吗?如果是,我该怎么做?
谢谢
答案 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;
}
注意imshow( window_name, image2 )
,我们不做任何事情来保存图像,只需使用循环在图像上逐步绘制(通过putText()
)。图像将相应地动态更新。
答案 1 :(得分:2)
OpenCV中没有hold
的概念
基本上,cv::imshow()
只会使用它获得的任何图像更新窗口。
要“叠加”,您实际上需要创建一个新图像(或重复使用现有图像),在此新图像上绘制和/或更新它,例如检测到您的角落,然后使用此更新后的图片再次致电imshow()
。