如何确定 cv::Mat 是否为零矩阵
How to determine if a cv::Mat is a zero matrix?
我有一个矩阵,它正在根据以下代码动态更改;
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何时由零填充?
我用过
if (countNonZero(NewData) < 1)
{
cout << "Eye contact occurs in this frame" << endl;
}
这是一种非常简单(如果可能不是最优雅)的方法。
要检查垫子是否为空,请使用 empty()
,如果 NewData 是 cv::Mat NewData.empty()
,如果 NewData 中没有元素,则返回 true。
要检查它是否全部为零,只需NewData == Mat::zeros(NewData.size(), NewData.type())
.
更新:
检查 OpenCV 源代码后,您实际上可以执行NewData == 0
检查所有元素是否等于 0。
countNonZero(Mat ) 将在 mat
这个怎么样..
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;
}
}
Mat 对象有一个空属性,所以你可以让 Mat 告诉你它是否有东西或它是空的。结果将是 true
或 false
.
相关文章:
- Difference in displaying cv2 Mat
- 如何确定我已使用非编码文件到达 EOF?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何在C++中确定文本文件中的元素是字符还是数字
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- Python中的for循环与C++有何不同
- 在clang++预处理器中确定gcc工具链版本
- 不确定要在我的main中放入什么才能使我的代码正常工作
- C++setiosflags函数操纵器-未确定的缩进
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 如何使用url确定网站协议
- 将CHW格式的浮点向量转换为cv::Mat
- C++中的openCV Mat访问冲突
- 通过构造函数动态确定类实现
- 遍历并行数组以确定C++中的最大数字
- C++如果必须在编译时确定大小,std::array 有什么意义?
- 如何确定 cv::Mat 使用的是内部数据还是外部数据
- 如何确定 cv::Mat 是否为零矩阵
- 什么是C++中的不确定行为?它与未定义的行为有何不同
- 我可以确定cv::Mat Opencv中的频道数量吗