提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 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

src1src2每个像素的像素值按位与,比如某位置对应两个像素值分别为:23185,则输出像素值为17,因为23185的二进制分别为1011110111001,按位与得到1000117

/* 输入 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

src1src2每个像素的像素值按位或,比如某位置对应两个像素值分别为:23185,则输出像素值为191,因为23185的二进制分别为1011110111001,按位或得到10111111191

/* 输入 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,按位取反得到11101000232

/* 输入 src 可为灰度图或彩色图;
** 输出 dst,尺寸和类型与 src 保持一致;
** 掩膜 mask,可通俗理解为一个遮罩,只对 mask 设定的有效区域进行操作;
*/
void bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());

\newline

bitwise_not效果如下图:

4. bitwise_xor

src1src2每个像素的像素值按位异或,比如某位置对应两个像素值分别为:23185,则输出像素值为177,因为23185的二进制分别为1011110111001,按位异或得到10101110174

/* 输入 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_andbitwise_orbitwise_notbitwise_xor的作用,帮助理解与使用。

OpenCV:对图像的位操作bitwise_and(与),bitwise_or(或),bitwise_not(非),bitwise_xor(异或)相关推荐

  1. C语言中的位操作、与、或、非、异或

    位操作运算与逻辑运算操作的区别 按位运算符进行逐位的逻辑运算(如:与或非),输出与输入位数一致: 逻辑运算符进行逻辑运算,不关注输入的某一位而是将输入作为整体进行逻辑操作,输出位数为1或0: 位与 位 ...

  2. opencv位运算,cv2.bitwise_and,cv2.bitwise_or,cv2.bitwise_not,cv2.bitwise_xor

    目录 与运算 或运算 非运算 异或运算 位运算完整代码 与运算 在opencv进行与运算使用cv2.bitwise_and方法 def bitwise_and(src1, src2, dst=None ...

  3. Python OpenCV 之图像乘除与像素的逻辑运算,图像处理取经之旅第 17 天

    今天的学习的内容是:通过 Python OpenCV 对图像实现乘除操作,涉及函数为 cv2.multiply 与 cv2.divide.后面又补充了一些像素的逻辑运算,以及一个综合案例 cv2.mu ...

  4. 使用Python,OpenCV制作图像Mask——截取ROIs及构建透明的叠加层

    使用Python,OpenCV制作图像Mask--截取ROIs及构建透明的叠加层 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用OpenCV制作Mask图像掩码.使用位运算和图像掩码允许我们只 ...

  5. 使用Python,OpenCV计算图像直方图(cv2.calcHist)

    使用Python,OpenCV计算图像直方图(cv2.calcHist 1. 效果图 2. 原理 2.1 什么是图像直方图? 2.2 计算直方图 2.3 可视化蒙版区域 3. 源码 参考 这篇博客将介 ...

  6. 使用Python,OpenCV从图像中删除轮廓

    使用Python,OpenCV从图像中删除轮廓 1. 效果图 2. 步骤 3. 源码 4. 参考 1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓 ...

  7. opencv 图片边缘渐变_基于OpenCV的图像卡通化

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本期将创建一个类似于Adobe Lightroom的Web应用程序 ...

  8. [转载] OpenCV-Python图像位与运算bitwise_and函数详解

    参考链接: Python中的numpy.bitwise_and ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一.概述 图像的与运算主要 ...

  9. 基于opencv的图像阴影消除车辆变道检测

    基于opencv的图像阴影消除 详细代码在这!!! 最大滤波 def max_filtering(N, I_temp):wall = np.full((I_temp.shape[0]+(N//2)*2 ...

最新文章

  1. 制作windows7 USB启动盘
  2. python如何在手机上下载模块-Python 下载文件的 11 种方式
  3. matlab仿真生成信号程序,信号与系统的MATLAB仿真
  4. 语言程序设计第4版黄洪艺_谭浩强《C程序设计》第4版网授精讲班【教材精讲+考研真题串讲】视频网课讲义课程资料...
  5. 基于 VS 2010 阐述C# 4个特性
  6. 通过F12控制台退订育碧(Ubisoft)邮件
  7. Qt总结之十八:总结
  8. Swift中的willSet与didSet
  9. 如何写论文?看下这份《科研论文撰写策略》为你指点一二
  10. 数据集:波士顿地区房价预测
  11. Matlab画图 线型控制
  12. 从本地硬盘启动计算机,戴尔笔记本电脑设置从硬盘启动的方法
  13. python 连接MySQL
  14. 聊聊那些专为算法设计的模式——模板方法模式
  15. 分布式系统生成唯一主键
  16. java图片处理---Javax.imageIO包的用法
  17. python 16.1 继承 重写 supper()方法 多重继承
  18. 公司裁员不想给补偿,竟然耍这些不要脸的裁员手段..
  19. 开放平台:网络淘金下一站
  20. 免费网络电话App 传统通信破冰者

热门文章

  1. 如何与低智商的人相处?
  2. CocoaPods深入一点
  3. python 调用HEG工具批量处理modis数据将hdf转为tif
  4. Ubuntu中编译linux内核后使用make menuconfig报错的解决办法
  5. Ural 2045 Richness of words
  6. 怎么分析出京东快递物流多次派件的单号
  7. Git使用学习(七、版本回滚)
  8. Tomcat 自动部署、回滚(java project)脚本
  9. 低延时直播系统开发技术方案
  10. c语言分离个位十位百位_用c语言如何表示出一个数的个位,百位,十位