簡體   English   中英

opencv:在c / c ++中檢查兩個iplimages是否彼此相等?

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

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