两个矩阵按位与、按位或、按位取反、按位异或,可以使用函数cv::bitwise_and()、cv::bitwise_or()、cv::bitwise_not()、cv::bitwise_xor()。如果不使用掩码,可以直接用逻辑运算符&、|、!、^;
函数原型为:
cv::bitwise_and(
cv::InputArray src1, // first input array
cv::InputArray src2, // second input array
cv::OutputArray dst, // result array
cv::InputArray mask = cv::noArray() // optional do only where nonzero
);
cv::bitwise_not(
cv::InputArray src, // input array
cv::OutputArray dst, // result array
cv::InputArray mask = cv::noArray() // optional,do only where nonzero
);
cv::bitwise_or(
cv::InputArray src1, // first input array
cv::InputArray src2, // second input array
cv::OutputArray dst, // result array
cv::InputArray mask = cv::noArray() // optional do only where nonzero
);
cv::bitwise_xor(
cv::InputArray src1, // first input array
cv::InputArray src2, // second input array
cv::OutputArray dst, // result array
cv::InputArray mask = cv::noArray() // optional do only where nonzero
);
示例代码:
cv::Mat m1 = cv::Mat::ones(cv::Size(4, 6), CV_8UC1);
cv::Mat m2 = cv::Mat::eye(cv::Size(4, 6), CV_8UC1);
cv::Mat m3;
cv::bitwise_and(m1, m2, m3);
std::cout << "& = \n " << m3 << std::endl;
cv::bitwise_or(m1, m2, m3);
std::cout << "| = \n " << m3 << std::endl;
cv::bitwise_not(m2, m3);
std::cout << "! = \n " << m3 << std::endl;
cv::bitwise_xor(m1, m2, m3);
std::cout << "^ = \n " << m3 << std::endl;
输出结果: