10 图像像素的逻辑操作
opencv知识点:
- 绘制矩形 - rectangle()
- 位运算 - 四种逻辑操作
本课所解决的问题:
- 如何绘制矩形?
- 绘制图形的最后一个参数shift有什么作用?
- 如何对图像进行位运算?
1.绘制矩形
我们先来绘制两个矩形,绘制矩形有两种传参方式
rectangele
绘制矩形
共7个参数
第1个参数 输入
第2个参数 矩形左上坐标
第3个参数 矩形右下坐标
第4个参数 矩形颜色
第5个参数 线宽
如果参数 >=0,则表示绘制矩形(如为1,表示绘制的矩形边为1个像素)
如果参数 < 0,则表示填充矩形(如-1,表示填充整个矩形)
第6个参数 lineType
关于图像锯齿,有几种方式处理
不管不顾,就用LINE_4 或者 LINE_8
消除锯齿,就用LINE_AA (AA就是反锯齿)
第7个参数 缩小图像,同时缩短矩形左上顶点与(0,0)位置的距离
0表示不变
1表示图像*1/2,同时距离(0,0)的x方向和y方向距离*1/2
2表示图像*(1/2)^2,同时距离(0,0)的x方向和y方向距离*(1/2)^2
rectangele
绘制矩形
共6个参数
第1个参数 输入
第2个参数 矩形的左上点+往对角方向延伸的距离(x1,x2,延伸长度1,延伸长度2)
第3个参数 矩形颜色
第4个参数 线宽
如果参数 >=0,则表示绘制矩形(如为1,表示绘制的矩形边为1个像素)
如果参数 < 0,则表示填充矩形(如-1,表示填充整个矩形)
第5个参数 lineType
关于图像锯齿,有几种方式处理
不管不顾,就用LINE_4 或者 LINE_8
消除锯齿,就用LINE_AA (AA就是反锯齿)
第6个参数 缩小图像,同时缩短矩形左上顶点与(0,0)位置的距离
0表示不变
1表示图像*1/2,同时距离(0,0)的x方向和y方向距离*1/2
2表示图像*(1/2)^2,同时距离(0,0)的x方向和y方向距离*(1/2)^2
//函数定义
void bitwise_demo(Mat& image);
//函数实现
void QuickDemo::bitwise_demo(Mat& image) {
Mat m1 = Mat::zeros(Size(256, 256), CV_8UC3);
Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);
//rectangle有两种传参方式,这里分别进行了示范
rectangle(m1, Point(100, 100), Point(180, 180), Scalar(255, 255, 0), -1, LINE_8,0);
rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0);
imshow("m1", m1);
imshow("m2", m2);
}
这里重点说一下最后1个参数int shift = 0
这个参数的作用是:缩小图像,同时缩短矩形左上顶点与(0,0)位置的距离
- 0表示不变
- 1表示图像 * 1/2,同时距离(0,0)的x方向和y方向距离 * 1/2
- 2表示图像 * (1/2)^2, 同时距离(0,0)的x方向和y方向距离 * (1/2)^2
- 3表示图像 * (1/2)^3, 同时距离(0,0)的x方向和y方向距离 * (1/2)^3
如下就是3,2,1,0对应的效果
2.位运算
在opencv中,图像的为运算有4种
- 与
- 或
- 非
- 异或
接下来,我们分别进行演示
void QuickDemo::bitwise_demo(Mat& image) {
Mat m1 = Mat::zeros(Size(256, 256), CV_8UC3);
Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);
rectangle(m1, Point(100, 100), Point(180, 180), Scalar(255, 255, 0), -1, LINE_4,0);
rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, 0);
Mat dst;
bitwise_and(m1, m2, dst);
//bitwise_or(m1, m2, dst);
//bitwise_not(m1, dst);
//bitwise_xor(m1, m2, dst);
imshow("位运算",dst);
}
bitwise_and(m1, m2, dst);
bitwise_or(m1, m2, dst);
为了更好的看到 非 的效果,这里我们选择对传入的图像image进行 非 运算
bitwise_not(image, dst);
还有取反符号版本
dst = ~image;
bitwise_xor(m1, m2, dst);