2012-12-19 53 views
0

我實際上在Android項目中工作,在其中我想提取一些特定的像素值(根據條件,使用閾值方法,我已經設置了一些像素到一定的值,其他所有的零)我想要在矢量中提取與零不同的所有這些值。我將使用所選像素的這個向量來做一些操作(例子的平均值),OpenCV中有沒有一種方法可以幫助我做到這一點?使用OpenCV從幀中提取像素矢量?

謝謝:)

回答

1

我不知道這樣的功能,但實際上它並不難實現它(C++):

//'in' should be CV_8UC3 
vector<int>& getNonZero(const Mat& in) 
{ 
    //get size of result vector 
    //this is all non-zero pixels: 
    int count = countNonZero(in); 
    vector<int>& result(count); 
    int k = 0; 

    for (int r = 0; r < in.rows; ++r) 
    { 
     for (int c = 0; c < in.cols; ++c) 
     { 
      if (in.at<int>(r, c)) 
      { 
       result[k++] = in.at<int>(r, c); 
      } 
     } 
    } 

    return result; 
} 

也有許多OpenCV函數有InputArray mask參數,所以用它!例如:

void meanStdDev(InputArray src, OutputArray mean, OutputArray stddev, InputArray mask=noArray())

+0

您的解決方案似乎工作,但是,操縱由一個要素一個實時做特別是當它將會在我看來很慢!對於相機中的每一幀羚牛,做所有這些循環肯定會減慢處理速度,也許應用程序會崩潰! – 3arbouch

+0

對於其他方法;我真的不知道如何使用InputArray掩碼來消除0值,例如從計算的平均值! – 3arbouch

+1

@ 3arbouch安靜,兄弟 - 爲什麼尖叫?你有沒有試圖谷歌使用這些方法,而不是尖叫在我身上? InputArray應該只是二進制掩碼(Mat),如果像素。例如,如果位置'(i,j)'處的掩碼中的像素等於0,那麼該像素將不會被用於平均值計算。你讀過功能的描述??! – ArtemStorozhuk