我想知道如何比较两个垫子的列
这是在做什么
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/