0
我想每隔40ms从灰度中减去两个图像,我从两个摄像机每隔40ms捕捉两个图像,然后将两个图像大小设置为(height = 480,width = 640),之后我转换为灰度。 但是当我使用两个图像的减法(absdiff)时,我得到“运行时错误”。 我注意到,当我显示两个图像的大小时,我得到了两个灰度图像大小不匹配的结果。使用Opencv和Qt的两个灰度图像的使用条件减去图像使用Opencv和Qt
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
在我宣布页眉
: CV ::垫edges1,src_gray1,edges2,src_gray2,src_gray3;
我的问题:什么在扣除方法的问题,是 大小灰度垫的问题?我如何为 两个图像设置相同的属性来克服这一点。
我使用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';
}
什么样的运行时错误?你尝试过调试吗?你发现了什么? |顺便说一句,您正在使用'Mat :: size'(最有可能打印包含指针的值)。您应该调用'()'运算符,并且如果您需要像素数,请在结果上调用'.area()'。即'src_gray1.size()。area()'。 –
@抛出'cv :: Exception'实例后调用的DanMašek终止 该操作既不是'array op array'(其中数组具有相同的大小和相同数量的通道),也不是'array op scalar',也不是'标量操作数组'arithm_op – user119436
@DanMašek运行时错误是“此应用程序已经请求运行时以非常规方式终止它”。当我使用减法操作时,问题就会出现。 – user119436