OpenCV - nach absdiff() mit Farbbild nur schwarzes Bild als Ergebnis

Fonce

Enthusiast
Thread Starter
Mitglied seit
27.07.2006
Beiträge
473
Hi ich habe ein Problem mit OpenCV und zwar bekomme ich als Ergebnis ein Schwarzes Bild wieder, wenn ich absdiff auf zwei Farbbilder anwende. Wenn ich hier ein Graubild verwende funktioniert es hingegen ohne Problem.
Ich versteh nur nicht wieso. :stupid:
Code:
void MainWindow::grabFrame()
{
  if(capture.isOpened())
  {
    Mat input_frame;
    capture >> input_frame;
    GaussianBlur(input_frame,input_frame,Size(3,3),0,0);
    Mat output_frame;

    if(VT_GRAYSCALED==ui->cbView->currentIndex())
      cvtColor(input_frame,output_frame,CV_BGR2GRAY);
    else if(VT_THRESHOLD==ui->cbView->currentIndex())
    {
      cvtColor(input_frame,output_frame,CV_BGR2GRAY);
      output_frame = output_frame > 65;
    }
    else if(VT_ABSOLUT_DIFFERENCE==ui->cbView->currentIndex() ||
            VT_DETECTION==ui->cbView->currentIndex())
    {
      Mat frame_gray_cur;
      frame_gray_cur=input_frame;
     // cvtColor(input_frame,frame_gray_cur,CV_BGR2GRAY);
      if(!firstRun)
      {
        Mat frame_absDiff = cvCreateMat(input_frame.cols,input_frame.rows,CV_8UC3);
        Mat frame_threshold;
        absdiff(frame_gray_prev,frame_gray_cur,frame_absDiff);
//        cvtColor(frame_absDiff,frame_absDiff,CV_BGR2GRAY);
//        frame_threshold = frame_absDiff > 70; //& frame_absDiff < 70;
//        dilate(frame_threshold,frame_threshold,Mat(),Point(-1,-1),1);
//        erode(frame_threshold,frame_threshold,Mat(),Point(-1,-1),2);
        if(VT_DETECTION==ui->cbView->currentIndex())
        {

        }
        output_frame=frame_absDiff;
        //output_frame=frame_threshold;
      }
      else
      {
        firstRun=false;
        output_frame=input_frame;
      }
      frame_gray_prev=frame_gray_cur;
    }
    else
      output_frame=input_frame;

    if(output_frame.type()==CV_8UC1)
      cvtColor(output_frame,output_frame,CV_GRAY2RGB);
    else
      cvtColor(output_frame,output_frame,CV_BGR2RGB);

    QImage img((const uchar*)output_frame.data,
               output_frame.cols,
               output_frame.rows,
               QImage::Format_RGB888);
    QPixmap pixmap = QPixmap::fromImage(img);
    ui->frameLabel->setPixmap(pixmap);
  }
}
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh