OpenCV提供比较运算的函数cv::compare(),函数原型:
cv::compare(
cv::InputArray src1, // first input array
cv::InputArray src2, // second input array
cv::OutputArray dst, // result array
int cmpop // comparision operator
);
该函数对两个矩阵进行逐元素比较,把结果放到dst中,dst的每个元素都是一个8位序列,匹配的像素被标记为255,不匹配的像素被设置为0。
参数cmpop作为比较运算符,可以是下列的值:
cmpop的值 | 比较操作 |
cv::CMP_EQ | (src1_i == src2_i) |
cv::CMP_GT | (src1_i > src2_i) |
cv::CMP_GE | (src1_i >= src2_i) |
cv::CMP_LT | (src1_i < src2_i) |
cv::CMP_LE | (src1_i <= src2_i) |
cv::CMP_NE | (src1_i != src2_i) |
通过比较运算符可以达到相同的效果,比如:
dst = (src1 == src2);就等价于cv::compare(src1, src2, dst,cv::CMP_EQ);
使用示例:
std::string strFilename = "Test.bmp";
cv::Mat img = cv::imread(strFilename);
if (img.empty()) {
std::cout << "ERROR: Open raw FAIL!" << std::endl;
return;
}
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_RGB2GRAY);
cv::namedWindow(strFilename, cv::WINDOW_NORMAL);
cv::Mat src2(gray.rows, gray.cols, gray.type(), cv::Scalar(64));
cv::Mat dst;
cv::compare(img, src2, dst, cv::CMP_GT);
cv::imshow(strFilename, dst);
cv::waitKey(0);
cv::destroyWindow(strFilename);
显示结果: