简体   繁体   English

使用Opencv和Qt对两个灰度图像的使用条款相减

[英]Terms of use subtraction for two grayscale Images using Opencv & Qt

I want to subtract two Images in gray-scale every 40ms, I capture two Images every 40ms from two cameras then set the two Images size to( height =480, width =640), after that I convert to gray-scale. 我想每40毫秒减去两个灰度图像,我每两个摄像头每40毫秒捕获两个图像,然后将两个图像的大小设置为(高度= 480,宽度= 640),然后转换为灰度。 but when I use the subtraction (absdiff) for the two Images I get "Run-time Error". 但是当我对两个图像使用减法(absdiff)时,会出现“运行时错误”。 I noticed that when I display the size of the two Images I get a unmatched Results in the size of the two gray-scale Images. 我注意到,当我显示两个图像的大小时,我得到两个灰度图像大小不匹配的结果。

src_gray1 cols is: =640 src_gray1 rows is: =480  src_gray1.size =0x28fd5c
src_gray2 cols is: =640  src_gray2 rows is: =480  src_gray2.size =0x28fdcc

in the Header I declared: cv::Mat edges1 , src_gray1 , edges2 , src_gray2 , src_gray3; 在标题中,我声明了:cv :: Mat edge1,src_gray1,edges2,src_gray2,src_gray3;

my question: whats the problem in subtraction method, is the size of the gray-scale Mat is the problem?, how I can set Same properties for the two images to get Over that. 我的问题:减法方法中的问题是什么,灰度Mat的大小是问题吗?我如何为两个图像设置Same属性以克服该问题。

I use Qt 5.5.0, my code here: 我使用Qt 5.5.0,我的代码在这里:

void MainWindow::on_pushButton_pressed()
{
     timer_40_ms->start();
     timer2_40_ms->start();
     cap1.open(0);
     if( !cap1.isOpened() )
     {
         std::cout<<"Camera1 did not open";
         return;
     }
     cap2.open(1);
     if( !cap2.isOpened() )
     {
         std::cout<<"Camera2 did not open";
         return;
     }
     cap1.set(CV_CAP_PROP_FRAME_HEIGHT,480);
     cap1.set(CV_CAP_PROP_FRAME_WIDTH,640);
     cap2.set(CV_CAP_PROP_FRAME_HEIGHT,480);
     cap2.set(CV_CAP_PROP_FRAME_WIDTH,640);

 }
 void MainWindow::ProcessFrame()
 {
     cv::Mat frame1;
     ii++;
     ui->textEdit->setText(QString::number(ii));
     cap1 >> frame1;
     cvtColor(frame1, src_gray1, CV_BGR2GRAY);
     std::cout<<"src_gray1 cols is:"<<" ="<<src_gray1.cols<<" "<<"src_gray1  rows is:"<<" ="<<src_gray1.rows<<"  "<<"src_gray1.size ="<<src_gray1.size<<'\n';
  }
void MainWindow::ProcessFrame2()
{
    cv::Mat frame2;
    ii2++;
    cap2 >> frame2;
    cvtColor(frame2, src_gray2, CV_BGR2GRAY);
    ui->textEdit_3->setText(QString::number(ii2));
    absdiff(src_gray1,src_gray2,src_gray3);
    cv::imshow( "CAM2 Video Labeler", src_gray3 );
    std::cout<<"src_gray2 cols is:"<<" ="<<src_gray2.cols<<"  "<<"src_gray2  rows is:"<<" ="<<src_gray2.rows<<"  "<<"src_gray2.size ="<<src_gray2.size<<'\n';
}

the problem was that ProcessFrame2() is invoked before ProcessFrame(), thank you @dan Masek for help: 问题是在ProcessFrame()之前调用了ProcessFrame2(),谢谢@dan Masek的帮助:

     void MainWindow::on_pushButton_pressed()
   {
     timer_40_ms->start();
     timer2_40_ms->start();
     cap1.open(0);
     if( !cap1.isOpened() )
     {
         std::cout<<"Camera1 did not open";
         return;
     }
     cap2.open(1);
     if( !cap2.isOpened() )
     {
         std::cout<<"Camera2 did not open";
         return;
     }
     cap1.set(CV_CAP_PROP_FRAME_HEIGHT,480);
     cap1.set(CV_CAP_PROP_FRAME_WIDTH,640);
     cap2.set(CV_CAP_PROP_FRAME_HEIGHT,480);
     cap2.set(CV_CAP_PROP_FRAME_WIDTH,640);

   }
 void MainWindow::ProcessFrame()
 {
     cv::Mat frame1;
     ii++;
     ui->textEdit->setText(QString::number(ii));
    cap1 >> frame1;
    cvtColor(frame1, src_gray1, CV_BGR2GRAY);
    absdiff(src_gray1,src_gray2,src_gray3);
    cv::imshow( "CAM2 Video Labeler", src_gray3 );
    std::cout<<"src_gray1 cols is:"<<" ="<<src_gray1.cols<<" "<<"src_gray1  rows is:"<<" ="<<src_gray1.rows<<"  "<<"src_gray1.size ="<<src_gray1.size<<'\n';
  }
void MainWindow::ProcessFrame2()
{
    cv::Mat frame2;
    ii2++;
    cap2 >> frame2;
    cvtColor(frame2, src_gray2, CV_BGR2GRAY);
    ui->textEdit_3->setText(QString::number(ii2));

   std::cout<<"src_gray2 cols is:"<<" ="<<src_gray2.cols<<"  "<<"src_gray2  rows is:"<<" ="<<src_gray2.rows<<"  "<<"src_gray2.size ="<<src_gray2.size<<'\n';
   }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM