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.
Ich versteh nur nicht wieso.
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);
}
}