微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从显示窗口中删除 cv::circle

如何解决如何从显示窗口中删除 cv::circle

我使用 OpenCV 库在图像上绘制圆圈。 我需要通过单击右键单击来擦除在窗口上绘制的最后一个圆圈。 目前,我写了解决方法,我用白色替换了红色圆圈。 但似乎还有另一种解决方案,例如擦除它。 如何更新我的用户界面?

std::vector<Point2f> right_image;    // stores 4 points that the user clicks(mouse left click) in the main image.


if (e == EVENT_RBUTTONDOWN && right_image.size() > 0) {
            float x0 = right_image[right_image.size()-1].x;
            float y0 = right_image[right_image.size()-1].y;
            cv::circle(dispImg,cv::Point(x0,y0),10,cv::Scalar(255,255,255),3);
            cv::imshow(cv::String(fullWindowName),dispImg);
            right_image.pop_back();
        }

解决方法

在没有任何叠加的情况下存储图像会更快,并且每帧重新绘制圆圈。如果您想追加、移动或删除圆,只需将其从要绘制的对象列表中删除即可。

,

如果您正在开发光栅绘图程序,您可以实现一个简单的撤消。您将不得不使用屏幕外图像 (dispImg) 和较小的“撤消”图像。在离屏图像上绘制圆圈之前,将图像中将被新圆圈占据的部分保存到一个新的较小的图像中。您还必须保存图像的位置。然后,当您想要删除圆圈时,将保存的图像复制回屏幕外图像到与撤消图像一起保存的位置。最后,将屏幕外图像绘制到窗口 (imshow)。

假设您有足够的内存,您可以将此扩展到多个级别的撤消。

如果您的程序是矢量绘图程序,那么像 Andrey 建议的显示列表是更好的选择。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。