OpenCV如何获得bool true,如果图像是' == '和false,如果不是
OpenCV how to get bool true if images are `==`and false if not?
我们试试这样的代码:
cv::Mat m1, m2;
cv::VideoCapture cap(0);
do {
cap >> m1;
cap >> m2;
} while(cv::norm(m1,m2)==0);
frames+=2;
//...
,但似乎不起作用。那么如何获得bool如果帧数据内容从相机捕获是相同的或不?
你的方法失败了,因为在真实的相机视频流中(从你的代码中我看到你从相机捕获)每两帧不相等,因为噪音,改变照明,小相机运动等。你可以这样修改支票:
cv::norm(m1,m2) < epsilon
其中epsilon
是一些你可以自己找到的无符号数(它取决于你的标准)。这是一个非常快速和简单的解决方案。
查看karlphillip的链接以获得更有效的解决方案
Google "opencv difference" =>
- http://andybest.net/2009/02/processing-opencv-tutorial-2-bubbles/
- http://ubaa.net/shared/processing/opencv/opencv_absdiff.html
- http://createdigitalmotion.com/2009/02/processing-tutorials-getting-started-with-video-processing-via-opencv/
opencv.absDiff ()
等
我知道在OpenCV中没有这样的函数,但它可以很容易地实现。任何返回元素和的函数都是错误的,因为一个像素的差异可以通过其他像素的差异来补偿。保证正确性的唯一方法是逐像素检查。下面是一个简单的例子:
template<typename T>
bool identical(cv::Mat m1, cv::Mat m2)
{
if(m1.cols != m2.cols || m1.rows != m2.rows)
return false;
for(int i=0; i<m1.rows; i++)
{
for(int j=0; j<m1.cols; j++)
{
if(m1.at<T>(i, j) != m2.at<T>(i, j))
return false;
}
}
return true;
}
我没有检查代码,所以,只要按ctrl+c就可以了
相关文章:
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 如果不是多个语句,请使用 if 语句
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- C++我们可以取消引用此指针吗?如果是这样,那么如何,如果不是,那为什么?
- 如果不分配内存,我如何能够为变量创建和分配值?
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 删除 QGraphicsPixmapItem (如果它已添加到场景中).如果不添加到场景
- 从库中发出信息,而无需运行时成本(如果不需要)
- 可能的模板和constexpr - 如果不兼容
- 如果不是这样,我需要帮助理解这个嵌套的问题
- 如果不需要易失性,为什么 std::atomic 方法会提供易失性重载
- 代码是否有效.如果我想显示第一个元素?如果不是,那么 s.begin() 会返回什么?
- 如果不手动完成,子类是否继承父类的析构函数?
- 如果不是十六进制,则QT从qlineedit中删除字符
- 如果不有效,如何重复用户输入电子邮件
- RE2 语法:如果不共享相同的前缀,则跳过匹配
- 如果不允许使用constexpr,为什么sfinae在上面
- 如果删除,如何返回 true,如果不使用 bool,则返回 false
- 如何编写一个c++代码,使函数在初始参数为大写时返回true,如果不是,则返回false
- OpenCV如何获得bool true,如果图像是' == '和false,如果不是