我有一个根据以下代码动态更改的矩阵;
for( It=all_frames.begin(); It != all_frames.end(); ++It)
{
ItTemp = *It;
subtract(ItTemp, Base, NewData);
cout << "The size of the new data for ";
cout << " is \n" << NewData.rows << "x" << NewData.cols << endl;
cout << "The New Data is: \n" << NewData << endl << endl;
NewData_Vector.push_back(NewData.clone());
}
我想要做的是确定cv :: Mat NewData为零矩阵的帧。 我已经尝试将它与具有相同大小的零矩阵进行比较,使用cv :: compare()函数和简单运算符(即NewData == NoData),但我甚至无法编译程序。
是否有一种简单的方法可以确定cv :: Mat何时被零填充?
答案 0 :(得分:23)
我用过
if (countNonZero(NewData) < 1)
{
cout << "Eye contact occurs in this frame" << endl;
}
这是一种非常简单(如果不是最优雅)的方式。
答案 1 :(得分:13)
要检查mat是否为空,请使用empty()
,如果NewData是cv :: Mat,如果NewData中没有元素,则NewData.empty()
返回true。
要检查它是否全为零,只需NewData == Mat::zeros(NewData.size(), NewData.type())
。
<强>更新强>
检查OpenCV源代码后,您实际上可以NewData == 0
检查所有元素是否等于0.
答案 2 :(得分:3)
countNonZero(Mat)将在mat中提供许多非零值
答案 3 :(得分:1)
这个怎么样..
Mat img = Mat::zeros(cvSize(1024, 1024), CV_8UC3);
bool flag = true;
MatConstIterator_<double> it = img.begin<double>();
MatConstIterator_<double> it_end = img.end<double>();
for(; it != it_end; ++it)
{
if(*it != 0)
{
flag = false;
break;
}
}
答案 4 :(得分:1)
Mat对象具有empty属性,因此您可以要求Mat告诉您它是否有东西或为空。结果将为true
或false
。