2016-02-15 53 views
0

我對C++很新穎,但是,我嘗試創建一些鹽和胡椒的噪音。 它幾乎完成了,只是在我想要洗牌一系列整數,不管我做什麼,無論我使用什麼樣的隨機函數,我總是得到那個討厭的「從這裏需要」,它不告訴我任何東西。 這裏是我的代碼:C++ - shuffle:從這裏需要

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 
#include <stdio.h> 
#include <random> 
#include <algorithm> 
#include <iterator> 



using namespace std; 
using namespace cv; 



int main(int argc, char** argv) 
{ 
cv::Mat m(256, 256, CV_8UC1, cv::Scalar(255)); 

     // Print it 
     // int counter = 0; 



     unsigned int range = 255 - 0 + 1; 
     int num = rand() % range ; 



     int x[256]; 
     for (int i = 0; i<256; i++){ 
      x[i]= i; 

     } 


     srand(17); 
     auto engine = std::default_random_engine{}; 
     shuffle(x[0], x[255], engine); 
     int coord[256][256]; 
     for (int t= 0; t<256; t++){ 
      coord[t][t] = x[t]; 
     } 

     for (int j = 0; j<256; j++){ 
      for (int k = 0; 0<256; k++) 
      {if (coord[j][k]<=num){ 
       cv::Mat black(m, cv::Rect(j, k, 1, 1)); 
       black = cv::Scalar(0, 0, 0); 
      } 

      } 
     } 

// Create a named window 
      cv::namedWindow("Test", cv::WINDOW_AUTOSIZE); 

      // Display 
      imshow("Test", m); 

      // Wait until a key is pressed 
      cv::waitKey(0); 

       return 0; 
     }; 

我得到這個錯誤似乎是由這一行造成的:

shuffle(x[0], x[255], engine); 

現在,我很高興地給予完整的編譯器的文本,但有些線路是這樣長期以來,不可能做必要的縮進,我試過了。 有沒有人有解決方法?

+1

對於未來,請提供[MCVE],其中在*最小強調*。這個問題與opencv和那些循環完全無關。 –

+1

另外'srand'不會給你的'std :: default_random_engine'播種,這是你期待的。閱讀[doc](http://en.cppreference.com/w/cpp/numeric/random)。 –

回答

1

你必須傳遞迭代器,而不是值。

應該

shuffle(std::begin(x), std::end(x), engine); 

shuffle(x, x + 256, engine);