簡體   English   中英

OpenCV 如果圖像是`==`,如何獲得布爾真,否則如何獲得假?

[英]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;
     //...

但它似乎不起作用。 那么如果從相機捕獲的幀數據內容是否相同,如何獲得布爾值呢?

您的方法失敗是因為在真實的相機視頻流中(從您的代碼中,我看到您從相機捕獲)每兩幀不相等,因為噪聲、光照變化、相機小運動等。您可以將檢查更改為:

cv::norm(m1,m2) < epsilon

其中epsilon是一些您可以自己找到的無符號數字(這取決於您的標准)。 這是非常快速和簡單的解決方案。

查看karlphillip的鏈接以獲得更有效的解決方案。

我知道在 OpenCV 中沒有這樣的 function,但它很容易實現。 任何返回元素總和的 function 都是錯誤的,因為一個像素的差異可以通過其他像素的差異來補償。 保證正確性的唯一方法是逐像素檢查。 這是一個簡單的例子:

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'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM