#include
#include
using namespace cv;
using namespace std;
int main(int argc, const char *argv[])
{
// create image one
Mat src1 = Mat::zeros(Size(400, 400), CV_8UC3);
Rect rect(100, 100, 100, 100);
src1(rect) = Scalar(0, 0, 255);//BGR 红色
imshow("input1", src1);
printf("create first image...\n");
// create image two
Mat src2 = Mat::zeros(Size(400, 400), CV_8UC3);
rect.x = 150;
rect.y = 150;
src2(rect) = Scalar(0, 255, 255);//BGR 黄色
imshow("input2", src2);
printf("create second image...\n");
// 逻辑操作
Mat dst1, dst2, dst3;
bitwise_and(src1, src2, dst1);
bitwise_xor(src1, src2, dst2);
bitwise_or(src1, src2, dst3);
// show results
imshow("dst1", dst1);
imshow("dst2", dst2);
imshow("dst3", dst3);
Mat src = imread("E:/Desktop/y.jpg");
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
// 取反操作
Mat dst;
bitwise_not(src, dst);
imshow("dst", dst);
waitKey(0);
return 0;
}
图像其实就是二维的矩阵,每个像素点就是二维矩阵每一个元素的值,图像之间的逻辑操作其实是跟我们平时的数值之间的逻辑操作是无异的:
Rect rect(100, 100, 100, 100);
这句的含义是:定义一个左上角点坐标为(100, 100)的100*100矩形窗口;
引申:
如果创建一个Rect对象rect(100, 50, 50, 100)
,那么rect会有以下几个功能:
rect.x //rect里的x成员函数,代表左上角横坐标的坐标值
rect.y //rect里的y成员函数,代表左上角纵坐标的坐标值
rect.area(); //返回rect的面积 5000
rect.size(); //返回rect的尺寸 [50 × 100]
rect.tl(); //返回rect的左上顶点的坐标 [100, 50]
rect.br(); //返回rect的右下顶点的坐标 [150, 150]
rect.width(); //返回rect的宽度 50
rect.height(); //返回rect的高度 100
rect.contains(Point(x, y)); //返回布尔变量,判断rect是否包含Point(x, y)点
bitwise_not
实现的作用就是跟之前004节的颜色反转所实现的效果是相同的。