【个人笔记】10 图像像素的逻辑操作

个人资料,仅供学习使用
学习课程:OpenCV4 C++ 快速入门视频30讲——贾志刚

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);

在这里插入图片描述

本课所用API查阅

OpenCV 4.6.0 官方文档

rectangle()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

bitwise_and()

在这里插入图片描述

在这里插入图片描述

bitwise_or()

在这里插入图片描述

在这里插入图片描述

bitwise_not()

在这里插入图片描述

在这里插入图片描述

bitwise_xor()

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啦啦啦大赛第大所

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值