簡體   English   中英

在opencv(c ++)中的所有像素上運行方法的最快方法是什么

[英]what is the fastest way to run a method on all pixels in opencv (c++)

我在opencv中的每個像素上有幾個任務要做。 我正在使用這樣的構造:

for(int row = 0; row < inputImage.rows; ++row)
    {
        uchar* p = inputImage.ptr(row);
        for(int col = 0; col < inputImage.cols*3; col+=3)
        {
            int blue=*(p+col);  //points to each pixel B,G,R value in turn assuming a CV_8UC3 colour image
            int green=*(p+col+1);
            int red=*(p+col+2);
            // process pixel            }

    }

這是可行的,但是我想知道是否有更快的方法可以做到這一點? 此解決方案不使用任何SIMD或OpenCV的任何並行處理。

在opencv中對圖像的所有像素運行方法的最佳方法是什么?

如果Mat是連續的,即矩陣元素在每行的末尾連續存儲而沒有間隙,可以使用Mat::isContinuous()進行引用,則可以將它們視為長行。 因此,您可以執行以下操作:

const uchar *ptr = inputImage.ptr<uchar>(0);

for (size_t i=0; i<inputImage.rows*inputImage.cols; ++i){
    int blue  = ptr[3*i];
    int green = ptr[3*i+1];
    int red   = ptr[3*i+2];

    // process pixel 
}

文檔中所述,這種方法雖然非常簡單,但可以將簡單元素操作的性能提高10%到20% ,尤其是在圖像很小且操作非常簡單的情況下。

PS:為了更快地需要,您將需要充分利用GPU來並行處理每個像素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM