c++ - 如何在OpenCV中比较两个Mats列

标签 c++ opencv

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

这是在做什么

 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'

所以如何比较列,因为我必须对两个图像进行逐列比较,所以当我将第二个图像附加到第一个图像时,我要确保将其附加在第一个图像的最后一列所在的位置等于第二张图片中的某处,从而消除了重复部分。

最佳答案

您可以检查两个矩阵是否与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));      
}

关于c++ - 如何在OpenCV中比较两个Mats列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61141410/

相关文章:

c++ - 如何构建简单的 OpenCV 程序

c++ - 谁定义了整数的符号反转模式?

c++ - 我如何从终端的谷歌测试套件中获取 C++ 代码超量?

c++ - 如何使用 OpenCV 降低图像的每像素位数

java - 尝试使使用 OpenCV 的 java 应用程序(可执行 Jar)可移植。出现不满意的链接错误

c++ - 为什么opencv的HOG描述符会返回这么多值

opencv:如何更改图像的透明度级别

c++ - 直接type cast derived到基类调用重载函数

c++ - 在 Ubuntu 上使用 RakNet 源码和 Code::Blocks

c++ STL cout源代码