OPenCV版本:4.4
IDE:VS2019
功能描述
计算两个矩阵的逻辑与运算(dst = src1 & src2),计算两个矩阵或一个矩阵与一个scalar的每个元素的位运算,
-
两个矩阵的大小要一样
[ dst ( I ) = src1 ( I ) ∧ src2 ( I ) if mask ( I ) ≠ 0 ] [\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0] [dst(I)=src1(I)∧src2(I)if mask(I)=0] -
.如果是一个矩阵和一个scalar,src2是由和src1.channels()一样的元素数量的 Scalar组成。
[ dst ( I ) = src1 ( I ) ∧ src2 if mask ( I ) ≠ 0 ] [\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} \quad \texttt{if mask} (I) \ne0] [dst(I)=src1(I)∧src2if mask(I)=0] -
如果是一个scalar和一个矩阵,src1是由和src2.channels()一样的元素数量的 Scalar组成。
[ dst ( I ) = src1 ∧ src2 ( I ) if mask ( I ) ≠ 0 ] [\texttt{dst} (I) = \texttt{src1} \wedge \texttt{src2} (I) \quad \texttt{if mask} (I) \ne0] [dst(I)=src1∧src2(I)if mask(I)=0]
如果是浮点数的矩阵,由机器决定的位表示法(通常是 IEEE754)来进行操作,如果是多通道矩阵,每个通道单独处理,以上第二和第三种情况下, scalar首先要转换成矩阵类型。
函数原型
CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2,
OutputArray dst, InputArray mask = noArray());
参数描述
- @参数 src1 第一个输入矩阵或一个 scalar
- @参数 src2 第二个输入矩阵或一个 scalar
- @参数 dst 输出矩阵,和输入矩阵同样大小和类型.
- @参数 mask 可选操作,8位单通道矩阵,确定输出矩阵将要改变的元素.
源码示例
#include <iostream>
#include <opencv2/opencv.hpp>
int main() {
cv::Mat image = cv::imread("D:\\OpenCVtest\\images\\juice.png");
cv::Mat mask(image.rows, image.cols, CV_8UC3, cv::Scalar(0, 0, 0));
std::cout << image.rows << " "<< image.cols;
cv::Rect r(100, 130, 250, 400);
rectangle(mask, r, cv::Scalar(255, 255, 255), -1);
cv::Mat out;
bitwise_and(image, mask, out);
cv::imshow("第一个矩阵原图", image);
cv::imshow("第二个矩阵原图", mask);
cv::imshow("位与运算结果图", out);
cv::waitKey(0);
return 0;
}
运算结果
第一个输入矩阵:
第二个输入矩阵:
输出矩阵: