繁体   English   中英

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

[英]how to scale gray scale image using accelerate framework (vImage)

嗨,我需要快速缩放灰度图像,所以我尝试了vImage,应用程序崩溃,请帮忙。 在下面的代码中,srcimg.data/dstimg.data是指向unsigned char图像数据(单通道仅灰色数据)。

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);

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

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

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

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

首先,只是一个注释:通常高度是行,宽度列 - 它看起来很奇怪你使用它的方式。

你是否为目标图像malloc内存:

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

您将部署目标设置为ios5或更高版本?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM