如何比较 OpenCV 中的两个 Mats 列

Posted

技术标签:

【中文标题】如何比较 OpenCV 中的两个 Mats 列【英文标题】:How to compare two Mats columns in OpenCV 【发布时间】:2020-04-10 13:33:48 【问题描述】:

我想知道我们如何比较两个垫子的列

这是在做什么

 cv::Mat M(2,2, CV_8UC3, cv::Scalar(0,0,255));
 cv::Mat M2(2,2, CV_8UC3, cv::Scalar(0,0,255));

 for(int c = 0; c < M.cols; c++ )
     if( M.col(c) == M2.col(0) )   // error

     

 

遇到错误

error: no viable conversion from 'cv::MatExpr' to 'bool'

所以如何比较列,因为我必须拼接两张我需要逐列比较的图像,这样当我将第二张图像与第一张图像附加时,我想确保我将它附加到最后一列的位置第一张图像等于第二张图像中的某处,因此消除了重复部分。

【问题讨论】:

【参考方案1】:

您可以按照here 的说明检查两个矩阵是否相同。

您可以传递列而不是整个矩阵:

bool are_equal(const cv::Mat& a, const cv::Mat& b)

    return (cv::sum(a != b) == cv::Scalar(0, 0, 0, 0));



int main()

    cv::Mat3b a(3, 3);
    cv::Mat3b b(3, 3);

    cv::randu(a, 0, 9);
    cv::randu(b, 0, 9);

    bool same_columns = are_equal(a.col(1), b.col(2));      

【讨论】:

以上是关于如何比较 OpenCV 中的两个 Mats 列的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV 和 Java 从 gif 帧中获取 Mats

cv::Mat 使用行数据填充一个新的 Mats 列

如何使用opencv比较存储在文件中的两个图像

如何根据列比较 unix 中的两个文件

如何基于相同的 ID 比较两个不同数据框中的日期列

如何在矩形子区域中划分 OpenCV Mat?