2017-06-06 16 views
0

こんにちは、私はまだ始まったばかりのC++/OpenCVの中央値のコード私は混乱CINDAだ を書き込もうと......エラー++ OpenCVの私の非常に最初のコード(メディアンフィルタ)

EDIT2: OK感謝親愛なる友人に私の最初のエラーが修正されました 今これは私の新しいエラーです:| 9要素のMatファイルをソートしたい。私は他のタイプのウィンドウ Matファイルを使用することはできますか?どのように私はエラーは、この行を参照corectly

それを並べ替えることができます。 のstd ::ソート(window.begin()、window.endを()); エラー: 'window'でメンバ 'begin'のリクエストがあります。これは非クラスタイプの 'cv :: Mat [9]'です。 | 36 | error: 'window'のメンバ 'end'に対する要求。非クラス型の 'cv :: Mat [9]' |

私はMathWorks社のMATLABをexpedと私は、C++での完全なnoobのだけど、これは私のコードです:

using namespace std; 
using namespace cv; 
Mat img_gray,img; 

int main() 
{ 

img = imread("6.jpg", IMREAD_COLOR); // Load an image 
if(img.empty()) 
    { return -1; } 
cvtColor(img, img_gray, COLOR_BGR2GRAY); 
int M = img.rows; 
int N = img.cols; 
cvNamedWindow("windows",WINDOW_AUTOSIZE); 
imshow("windows",img); 
for (int m = 2; m < M - 1; ++m) 
    for (int n = 2; n < N - 1; ++n) 
    { 
     int k = 0; 
     int tmpmedian = 0; 
     //int window[9]={0}; 
     Mat window[9]; 
     for (int i = m - 1; i < m + 2; ++i){ 
      for (int j = n - 1; j < n + 2; ++j) 
      { 
       window[k++] = img_gray.at<uchar>(i, j); 
      } 
      std::sort(window.begin(), window.end()); 
      tmpmedian = window[5]; 
      fimg[m][n] = tmpmedian; 
     } 
    } 
} 

私は学生ですし、私のクラスのプロジェクト のためにこれを必要と私は感謝たくさんご回答に感謝

+0

あなたが** img.at (Y、X)を使用してマット変数の画素値にアクセスすることができ; **例コード: 'Vec3b強度= img.at (Y、X)を。 uchar blue = intensity.val [0]; uchar green = intensity.val [1]; uchar red = intensity.val [2]; ' – Ibrahim

+0

ありがとう、この作品 "img.at (y、x);"今、ソートの問題があり、ソートされた9要素ベクトルの中央値が5要素ではないことに気付きました! :| –

+0

もちろん、ソートされた9要素ベクトルの中央値、その5番目の要素(もちろんインデックス4)。それ以外に何が必要ですか? – Piglet

答えて

0

forループでは、これを試してみてください。

int k = 0; 
int tmpmedian = 0; 
int window[9]={0}; 
for (int i = m - 1; i < m + 2; ++i) 
    for (int j = n - 1; j < n + 2; ++j) 
     window[k++] = img_gray.at<uchar>(i, j); 
std::sort(std::begin(window), std::end(window)); 
tmpmedian = window[4]; 
fimg[m][n] = tmpmedian; 
  1. 型オブジェクトの配列を宣言する。私はあなたがそれを望むとは思わない。 9 int値の配列が必要です。だからあなたが必要なのはint window[9]です。

  2. std::begin()std::end()の使用が間違っています。 std::sort(std::begin(window), std::end(window))が必要です。

  3. 配列インデックスは0から始まります。したがって、中央値はwindow[4]ではなく、window[5]に格納されます。

関連する問題