簡體   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