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