与、或、非、异或 ,利用Mask操作
- 与:
bitwise_and
- 或:
bitwise_or
- 非:
bitwise_not
- 异或:
bitwise_xor
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat src = imread("D:/VC2017_WORKSPACE/Images/dog.jpg");
if (src.empty()) {
printf("could not find image file");
return -1;
}
imshow("dog", src);
//【非】图像取反,利用mask
Mat dst1;
Mat mask = Mat::zeros(src.size(), CV_8UC1);
int w = src.cols / 2;
int h = src.rows / 2;
for (int row = 0; row < w; row++) {
for (int col = 0; col < h; col++) {
mask.at<uchar>(row, col) = 255;//对mask指定区域遍历,并赋值为255
}
}
imshow("mask", mask);
bitwise_not(src, dst1, mask);//第三个参数为mask对象
imshow("图像取反", dst1);
//【与】
Mat dst2;
bitwise_and(src, src, dst2, mask);
imshow("与", dst2);
//【或】
Mat dst3;
bitwise_or(src, src, dst3, mask);
imshow("或", dst3);
//【异或】
Mat dst4;
bitwise_xor(src, src, dst4, mask);
imshow("异或", dst4);
waitKey(0);
destroyAllWindows();
return 0;
}
运行结果:
只有mask白色区域会有效果
因为选用了两幅相同的src,所以与和或的效果还是原图的效果
异或:相异为1,相同为0。由于参与异或操作的两幅图像都是dog图像,所以两幅每个像素一模一样,相同则为0,故在mask区域的异或效果也为黑色