OpenCV:对图像的位操作bitwise_and(与),bitwise_or(或),bitwise_not(非),bitwise_xor(异或)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- mask
- 像素按位操作函数
- 1. bitwise_and
- 2. bitwise_or
- 3. bitwise_not
- 4. bitwise_xor
- 5.带掩膜操作
- 总结
前言
使用opencv对图像处理时,可能需要对图像按位操作,而opencv自带位操作运算函数,不必再手写遍历算法,位操作函数包括:
bitwise_and
与
bitwise_or
或
bitwise_not
非
bitwise_xor
异或
mask
关于掩膜mask请点击查看
\newline
像素按位操作函数
1. bitwise_and
将src1
和 src2
每个像素的像素值按位与,比如某位置对应两个像素值分别为:23
和 185
,则输出像素值为17
,因为23
,185
的二进制分别为10111
,10111001
,按位与得到10001
即17
。
/* 输入 src1,src2,可为灰度图或彩色图,src1 和 src2 大小需一样;
** 输出 dst,尺寸和类型与 src 保持一致;
** 掩膜 mask,可通俗理解为一个遮罩,只对 mask 设定的有效区域进行操作;
*/
void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
\newline
src1如下图:
\newline
src2如下图:
\newline
bitwise_and效果如下图:
2. bitwise_or
将src1
和 src2
每个像素的像素值按位或,比如某位置对应两个像素值分别为:23
和 185
,则输出像素值为191
,因为23
,185
的二进制分别为10111
,10111001
,按位或得到10111111
即191
。
/* 输入 src1,src2,可为灰度图或彩色图,src1 和 src2 大小需一样;
** 输出 dst,尺寸和类型与 src 保持一致;
** 掩膜 mask,可通俗理解为一个遮罩,只对 mask 设定的有效区域进行操作;
*/
void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
\newline
bitwise_o效果r如下图:
3. bitwise_not
将src
像素的像素值按位取非,比如某像素值为:23
,则输出像素值为232
,因为23
的二进制为10111
,按位取反得到11101000
即232
。
/* 输入 src 可为灰度图或彩色图;
** 输出 dst,尺寸和类型与 src 保持一致;
** 掩膜 mask,可通俗理解为一个遮罩,只对 mask 设定的有效区域进行操作;
*/
void bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());
\newline
bitwise_not效果如下图:
4. bitwise_xor
将src1
和 src2
每个像素的像素值按位异或,比如某位置对应两个像素值分别为:23
和 185
,则输出像素值为177
,因为23
,185
的二进制分别为10111
,10111001
,按位异或得到10101110
即174
。
/* 输入 src1,src2,可为灰度图或彩色图,src1 和 src2 大小需一样;
** 输出 dst,尺寸和类型与 src 保持一致;
** 掩膜 mask,可通俗理解为一个遮罩,只对 mask 设定的有效区域进行操作;
*/
void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
\newline
bitwise_xor效果如下图:
5.带掩膜操作
例如将src1中人头取反,其他保持不变,代码如下:
#include <opencv2/opencv.hpp>using namespace cv;int main() {Mat src1 = imread("img1.png", IMREAD_GRAYSCALE);Mat src2 = imread("img2.png", IMREAD_GRAYSCALE);cv::resize(src1, src1, Size(640, 480));cv::resize(src2, src2, Size(640, 480));imshow("src1", src1);imshow("src2", src2);// 将mask中包含人头的区域像素值设为255Mat mask = Mat::zeros(Size(640, 480), CV_8UC1);mask(Rect(320, 50, 260, 310)) = 255;Mat dst;// 只对人头取反bitwise_not(src1, dst, mask);imshow("mask1", mask);// 将mask反转,得到新的maskbitwise_not(mask, mask);imshow("mask2", mask);// 将src1中人头之外的区域拷贝到dstsrc1.copyTo(dst, mask);imshow("dst", dst);waitKey();return 0;
}
结果如下:
mask1
\newline
mask2
\newline
dst
\newline
总结
主要记录bitwise_and
,bitwise_or
,bitwise_not
,bitwise_xor
的作用,帮助理解与使用。
OpenCV:对图像的位操作bitwise_and(与),bitwise_or(或),bitwise_not(非),bitwise_xor(异或)相关推荐
- C语言中的位操作、与、或、非、异或
位操作运算与逻辑运算操作的区别 按位运算符进行逐位的逻辑运算(如:与或非),输出与输入位数一致: 逻辑运算符进行逻辑运算,不关注输入的某一位而是将输入作为整体进行逻辑操作,输出位数为1或0: 位与 位 ...
- opencv位运算,cv2.bitwise_and,cv2.bitwise_or,cv2.bitwise_not,cv2.bitwise_xor
目录 与运算 或运算 非运算 异或运算 位运算完整代码 与运算 在opencv进行与运算使用cv2.bitwise_and方法 def bitwise_and(src1, src2, dst=None ...
- Python OpenCV 之图像乘除与像素的逻辑运算,图像处理取经之旅第 17 天
今天的学习的内容是:通过 Python OpenCV 对图像实现乘除操作,涉及函数为 cv2.multiply 与 cv2.divide.后面又补充了一些像素的逻辑运算,以及一个综合案例 cv2.mu ...
- 使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层
使用Python,OpenCV制作图像Mask--截取ROIs及构建透明的叠加层 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用OpenCV制作Mask图像掩码.使用位运算和图像掩码允许我们只 ...
- 使用Python,OpenCV计算图像直方图(cv2.calcHist)
使用Python,OpenCV计算图像直方图(cv2.calcHist 1. 效果图 2. 原理 2.1 什么是图像直方图? 2.2 计算直方图 2.3 可视化蒙版区域 3. 源码 参考 这篇博客将介 ...
- 使用Python,OpenCV从图像中删除轮廓
使用Python,OpenCV从图像中删除轮廓 1. 效果图 2. 步骤 3. 源码 4. 参考 1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓 ...
- opencv 图片边缘渐变_基于OpenCV的图像卡通化
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本期将创建一个类似于Adobe Lightroom的Web应用程序 ...
- [转载] OpenCV-Python图像位与运算bitwise_and函数详解
参考链接: Python中的numpy.bitwise_and ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一.概述 图像的与运算主要 ...
- 基于opencv的图像阴影消除车辆变道检测
基于opencv的图像阴影消除 详细代码在这!!! 最大滤波 def max_filtering(N, I_temp):wall = np.full((I_temp.shape[0]+(N//2)*2 ...
最新文章
- 制作windows7 USB启动盘
- python如何在手机上下载模块-Python 下载文件的 11 种方式
- matlab仿真生成信号程序,信号与系统的MATLAB仿真
- 语言程序设计第4版黄洪艺_谭浩强《C程序设计》第4版网授精讲班【教材精讲+考研真题串讲】视频网课讲义课程资料...
- 基于 VS 2010 阐述C# 4个特性
- 通过F12控制台退订育碧(Ubisoft)邮件
- Qt总结之十八:总结
- Swift中的willSet与didSet
- 如何写论文?看下这份《科研论文撰写策略》为你指点一二
- 数据集:波士顿地区房价预测
- Matlab画图 线型控制
- 从本地硬盘启动计算机,戴尔笔记本电脑设置从硬盘启动的方法
- python 连接MySQL
- 聊聊那些专为算法设计的模式——模板方法模式
- 分布式系统生成唯一主键
- java图片处理---Javax.imageIO包的用法
- python 16.1 继承 重写 supper()方法 多重继承
- 公司裁员不想给补偿,竟然耍这些不要脸的裁员手段..
- 开放平台:网络淘金下一站
- 免费网络电话App 传统通信破冰者