[英]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.