如何使用加速框架(vImage)缩放灰度图像

时间:2012-07-24 11:23:49

标签: ios objective-c image-processing accelerate-framework vimage

您好我需要快速缩放灰度图像,所以我尝试了vImage并且应用程序崩溃了,请帮忙。在下面的代码中,srcimg.data/dstimg.data指向无符号字符图像数据(仅限单通道灰色数据)。

                    vImage_Buffer src;
                    src.data=srcimg.data;
                    src.height=srcimg.cols;
                    src.width=srcimg.rows;
                    src.rowBytes=srcimg.cols;

                    vImage_Buffer dest;
                    dest.data=dstimg.data;
                    dest.height=dstimg.cols;
                    dest.width=dstimg.rows;
                    dest.rowBytes=dstimg.cols;
                    vImageScale_Planar8(&src, &dest, NULL, kvImageNoFlags);

3 个答案:

答案 0 :(得分:2)

对于vImage / Geometry.h中的重采样API,我们选择使用向量单元来提供更好的质量而不是更快的速度。这是因为向量单元在内存中进行分散访问时通常很差,这很大程度上是因为线性或最近邻重采样与非单位步长的简单操作。他们似乎并不擅长使最近邻居或线性过滤变得更快。所以,我们转而使用Lanczos过滤,它会查看更大的连续像素区域,以找出每个结果像素。它看起来很棒(我认为),但是更加努力才能获得令人敬畏的效果。

此外,如果你想要的只是线性或最近邻滤波,那么GPU就有硬件了!

通常,vImage中的API旨在为您提供比滚动自己更快的结果。

答案 1 :(得分:1)

cv::resize默认使用线性插值。 vImageScale_Planar8使用Lanczos resampling,这更复杂,但也提供了更好的质量。你要比较苹果和橘子。

答案 2 :(得分:0)

首先,只是一个评论:通常高度是行,宽度列 - 它看起来很奇怪你使用它。

您是否为目标图像设置了内存:

dstimg.data = malloc(dstimg.cols * dstimg.rows);

您将部署目标设置为ios5还是更新?

我在iOS5上使用了Accelerate框架没有任何问题。