![](/img/trans.png)
[英]How do you scale an image using vImage in the Accelerate framework in iOS 8?
[英]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.