gpt4 book ai didi

ios - 为什么 cv::resize 这么慢?

转载 作者:技术小花猫 更新时间:2023-10-29 11:13:05 25 4
gpt4 key购买 nike

我正在对实时视频源进行一些边缘检测:

- (void)processImage:(Mat&)image;
{
cv::resize(image, smallImage, cv::Size(288,352), 0, 0, CV_INTER_CUBIC);
edgeDetection(smallImage);
cv::resize(smallImage, image, image.size(), 0, 0, CV_INTER_LINEAR);
}

edgeDetection 做了一些相当繁重的工作,并且以相当低的帧速率运行,视频帧大小为 1280x720。添加 resize 调用显着 降低了帧率,这与我的预期完全相反。这仅仅是因为调整大小操作很慢,还是因为我做错了什么?

smallImage 在 header 中声明为:

@interface CameraController : UIViewController
<CvVideoCameraDelegate>
{
Mat smallImage;
}

它没有初始化,它工作正常。

最佳答案

调整图像大小很慢,而且您要为每个处理过的帧执行两次。有多种方法可以以某种方式改进您的解决方案,但您必须提供有关您试图解决的问题的更多详细信息。

首先,在检测边缘之前调整图像大小会导致为边缘检测提供较少的信息,因此会导致检测到较少的边缘 - 或者至少会使检测边缘变得更加困难。

使用的调整大小算法也会影响其速度,CV_INTER_LINEAR 是最快的 cv::resize 如果我的内存没有失败 - 并且您正在使用 CV_INTER_CUBIC 进行第一次调整。

调整图像大小的替代方法是处理原始图像的较小区域。为此,您应该查看 opencv 图像 ROI(感兴趣区域)。这很容易做到,您在本网站上有很多关于这些的问题。缺点是您将只检测一个区域的边缘,而不是整个图像,这可能没问题,具体取决于问题。

如果你真的想调整图像的大小,opencv 开发人员通常在他们想要处理较小的图像时使用 pyrDownpyrUp 函数,而不是 resize 。我认为这是因为它更快,但是您可以对其进行测试以确保。 More information about pyrDown and pyrUp in this link.

关于 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 快。

关于ios - 为什么 cv::resize 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14852831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com