2011-03-21 3 views
0

나는 cv 네임 스페이스 (Qt4.7)를 사용하여 openCV 2.2에서 백그라운드 뺄셈을 시도하고있다. 하나의 매트가 다른 매트와 같지 않기 때문에 프로그램을 실행할 때 다음과 같은 코드가 컴파일되지만 다음과 같은 코드가 있습니다.하지만 매트가 어디 있는지 알 수 없으므로 현재 API 참조를 통해 찾으려고합니다.내 코드에서 Mat equivalence 규칙을 어 겼습니까?

  cvtColor(mcolImage, mcolImage, CV_BGR2RGB); 
      cvtColor(mcolImage, gscaleImage, CV_RGB2GRAY); 

      acc = Mat(Size(440,320), CV_32FC3); 
      accSQ = Mat(Size(440,320), CV_32FC3); 

      //we accumulate into a Mat to get an frames average 
      Mat avg; 
      accumulateWeighted(gscaleImage, acc, 3.0, Mat()); 
      accumulateSquare(gscaleImage, accSQ, Mat()); 
      multiply(acc, acc, avg, 1); 

      Mat sigma, sigmaSQRT; 
      subtract(accSQ, avg, sigmaSQRT, Mat()); 
      sqrt(sigmaSQRT, sigma); //Holds the standard deviation 

      Mat fgImage; //hold the foreground image 
      cv::absdiff(avg,gscaleImage, fgImage); 

      //GaussianBlur(gscaleImage, gscaleImage, Size(7,7), 2, 2); 

      Mat buff ; 
      //convert to black and white 
      threshold(fgImage, buff, 75, THRESH_BINARY, 100); 

      dilate(buff, buff, Mat(3, 3, CV_8UC1), Point(-1, -1), 1, BORDER_CONSTANT, Scalar(1.0, 1.0, 1.0, 0)); 
      erode(buff, buff, Mat(3, 3, CV_8UC1), Point(-1, -1), 1, BORDER_CONSTANT, Scalar(1.0, 1.0, 1.0, 0)); 

      //rectangle(gscaleImage, cvPoint(100, 300), cvPoint(200, 100), cvScalar(255, 255, 255, 0), 1); 

      QImage colImagetmp((uchar*)mcolImage.data, mcolImage.cols, mcolImage.rows, mcolImage.step, 
           QImage::Format_RGB888); //Colour 

      QImage gscaleImagetmp ((uchar*)gscaleImage.data, gscaleImage.cols, gscaleImage.rows, gscaleImage.step, 
           QImage::Format_Indexed8); //Greyscale. I hope 

      QImage bwImagetmp((uchar*)buff.data, buff.cols, buff.rows, buff.step, 
          QImage::Format_Indexed8); 

      //Setup a colour table for the greyscale image 
      QVector<QRgb> colorTable; 
      for (int i = 0; i < 256; i++) colorTable.push_back(qRgb(i, i, i)); 
      bwImagetmp.setColorTable(colorTable); 
      gscaleImagetmp.setColorTable(colorTable); 


      ui.intDisplay->setPixmap(QPixmap::fromImage(bwImagetmp)); 
      ui.bwDisplay->setPixmap(QPixmap::fromImage(gscaleImagetmp)); 
      ui.colDisplay->setPixmap(QPixmap::fromImage(colImagetmp)); 

고맙습니다.

편집 : 나는 프로그램이 충돌되는 곳 absdiff(avg, gscaleImage, fgImage);는 것을 발견

코드를 통과 한 후. 제 생각에는 두 번째 매개 변수가 충돌 할 수도 있지만 확실하지는 않습니다.

답변

0

새로운 임시 Mat를 선언하고이를 (avg.convert()를 사용하여) gscaleImage 유형 및 크기와 일치하도록 구체적으로 변환하여 해결했습니다.