gpt4 book ai didi

c++ - 使用 Opencv 和 Qt 对两个灰度图像进行减法的使用条款

转载 作者:行者123 更新时间:2023-11-28 04:07:20 25 4
gpt4 key购买 nike

我想每 40 毫秒减去两个灰度图像,我每 40 毫秒从两个相机捕获两个图像,然后将两个图像大小设置为(高度 =480,宽度 =640),然后转换为灰度.但是当我对两个图像使用减法(absdiff)时,我得到“运行时错误”。我注意到,当我显示两个图像的大小时,我得到了两个灰度图像大小不匹配的结果。

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

在 header 中我声明: cv::Mat edges1, 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.

我用的是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';
}

最佳答案

问题是 ProcessFrame2() 在 ProcessFrame() 之前被调用,感谢 @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';
}

关于c++ - 使用 Opencv 和 Qt 对两个灰度图像进行减法的使用条款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42893624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com