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

Posted

技术标签:

【中文标题】如何在向量中找到相同的 cv::Mat<cv::Mat>【英文标题】:How to find the same cv::Mat in vector<cv::Mat> 【发布时间】:2015-11-11 00:08:07 【问题描述】:

标题说明了一切..

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

所以,我想补充的是,首先检查 same 图像是否已在我的训练数据中使用/存在..

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

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/arithm.cpp,第 2465 行 libc++abi.dylib:以 cv::Exception 类型的未捕获异常终止:/tmp/opencv-HEsb4m/opencv-2.4.9/modules/core/src/arithm.cpp:2465:错误:(-209)操作既不是'array op array'(其中数组具有相同的大小和相同的类型),也不是'array op scalar',也不是函数compare中的'scalar op array'

这很奇怪,因为 MatQ && MatV[i] 的类型应该是一样的.. 它们被定义为

MatQ; 向量 MatV;

有什么想法吗?因为我是 C++ 菜鸟。

【问题讨论】:

报错告诉你图片大小不同,不能比较不同大小的数组 【参考方案1】:

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

要使其工作,您可以先检查它们的大小是否相同。您只需要进行下一次检查它们是否具有相同的大小。喜欢

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

【讨论】:

以上是关于如何在向量中找到相同的 cv::Mat<cv::Mat>的主要内容,如果未能解决你的问题,请参考以下文章

向量的 OpenCV 向量到 cv::Mat

为啥将 cv::Mat 的一列复制到向量中失败?

std::vector<cv::Vec3b> 到 cv::Mat

Uchar 到 cv::Mat 的向量

为未知大小的 cv::Mat 保留向量内存

如何清除 cv::Mat 内容?