OpenCV如何获得bool true,如果图像是' == '和false,如果不是

OpenCV how to get bool true if images are `==`and false if not?

本文关键字:如果不 false 图像 何获得 bool true 如果 OpenCV      更新时间:2023-10-16

我们试试这样的代码:

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就可以了

相关文章: