如何在向量中找到相同的cv::Mat<简历::Mat>

How to find the same cv::Mat in vector<cv::Mat>

本文关键字:Mat cv lt gt 简历 向量      更新时间:2023-10-16

标题说明了一切。。

对于我的小图像识别项目,我正在对queryDescriptors和vectorOfTrainingDescriptors进行匹配。

因此,我想补充的是,首先检查相同的图像是否已经在我的训练数据中使用/存在。。

我认为这应该是一项简单的任务,并尝试了以下操作:

int findTheSameMat(const cv::Mat MatQ, const vector<cv::Mat> MatV) {
    int result = -1;
    for (int i = 0; i < MatV.size(); i++) {
        if (cv::countNonZero(MatQ != MatV[i]) == 0) {
            result = i;
            break;
        }
    }
    return result;
}

但我收到以下错误消息:

OpenCV错误:在比较中,输入参数的大小不匹配(操作既不是"array-op-array"(其中数组具有相同的大小和类型),也不是"array op scalar"或"scalar op array"),文件/tmp/OpenCV-HEsb4m/OpenCV-2.4.9/modules/core/src/athmethy.cpp,第2465行libc++abi.dylib:终止于cv::exception:/tmp/opencv-HEsb4m/opencv-2.4.9/modules/core/src/arrithms.cpp:2465:error:(-209)函数compare 中的操作既不是"array-op-array"(其中数组具有相同大小和类型),也不是"array op scalar"或"scalar op array"

这很奇怪,因为MatQ&amp;MatV[i]应该是相同的。。它们被定义为

Mat-MatQ
向量<垫子>MatV;

有什么想法吗?因为我是一个C++迷。

MatQ != MatV[i]要求MatQMatV[i]具有相同的大小,即相同的宽度和高度。

要使其工作,您可以首先检查它们的大小是否相同。如果它们的尺寸相同,您只需要进行下一次检查。像

if (MatQ.size() == MatV[i].size()) {
    if (cv::countNonZero(MatQ != MatV[i]) == 0) {
        result = i;
        break;
    }
}