[英]opencv: check if two iplimages is equal to each other in c/c++?
我想檢查兩個Iplimage對象,以查看它們包含的圖像是否相同。 如何在C / C ++中完成?
例如:
bool equal (Iplimage *source1, IplImage *source2) {
if (source1 == source2)
return true;
return false;
}
由於您使用的是OpenCV 3.0和C ++,因此可以(並且應該)使用Mat
:
bool equal (Iplimage *source1, IplImage *source2) {
cv::Mat mat1 = cv::cvarrToMat(source1);
cv::Mat mat2 = cv::cvarrToMat(source2);
cv::Mat D;
absdiff(mat1, mat2, D);
cv::Scalar s = sum(D);
return s == cv::Scalar::all(0);
}
更新:我必須使用此處找到的cv::cvarrToMat
方法,因為在OpenCV 3.0中刪除了Mat(IplImage)
構造函數。 還有一個理由完全取消IplImages。
這將適用於具有1、3或4通道的圖像,但是輸入必須具有相同的大小,深度和通道數。 正如@Miki在評論中指出的那樣,您可以輕松地為這些條件添加檢查,如果不滿足則返回false
。
大概因為您沒有提出問題,所以您給出的示例不起作用。 您必須比較內容,而不是指針。 你可以這樣
#include <string.h>
bool equal (Iplimage *source1, IplImage *source2) {
if (memcmp(source1, source2, sizeof(Iplimage)) == 0)
return true;
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.