调整图像的大小很慢,并且您要为每个处理的帧执行两次。有几种方法可以以某种方式改进您的解决方案,但您必须提供有关您尝试解决的问题的更多详细信息。
首先,在检测边缘之前调整图像大小会导致边缘检测得到更少的信息,从而导致检测到的边缘更少——或者至少会使检测它们变得更加困难。
此外,使用的调整大小算法会影响其速度,如果我的记忆没有失败, CV_INTER_LINEAR 是 cv::resize 最快的 - 并且您正在使用 CV_INTER_CUBIC 进行第一次调整大小。
调整图像大小的一种替代方法是处理原始图像的较小区域。为此,您应该查看 opencv image ROI's (region of interest)。这很容易做到,你在这个网站上有很多关于这些的问题。缺点是您将只检测一个区域中的边缘而不是整个图像,这可能没问题,具体取决于问题。
如果你真的想调整图像大小,opencv 开发人员在处理较小的图像时通常会使用pyrDown和pyrUp函数,而不是resize。我认为这是因为它更快,但是您可以肯定地对其进行测试。此链接中有关 pyrDown 和 pyrUp 的更多信息。
关于 cv::resize 算法,这里是列表:
INTER_NEAREST - a nearest-neighbor interpolation
INTER_LINEAR - a bilinear interpolation (used by default)
INTER_AREA - resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method.
INTER_CUBIC - a bicubic interpolation over 4x4 pixel neighborhood
INTER_LANCZOS4 - a Lanczos interpolation over 8x8 pixel neighborhood
不能肯定地说INTER_LINEAR是不是最快的,但肯定比INTER_CUBIC快。