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

本文介绍了OpenCV库中四位运算函数(bitwise_and、bitwise_or、bitwise_not、bitwise_xor),通过实例演示如何使用这些函数进行像素级操作,如图像掩码处理和人像取反。适合理解和实践图像处理中的位操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

使用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如下图:
src1

\newline

src2如下图:

src2.png

\newline

bitwise_and效果如下图:

and.png

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如下图:

or.png

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效果如下图:

not.png

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效果如下图:

xor.png

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中包含人头的区域像素值设为255
  Mat 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反转,得到新的mask
  bitwise_not(mask, mask);
  imshow("mask2", mask);
  // 将src1中人头之外的区域拷贝到dst
  src1.copyTo(dst, mask);
  imshow("dst", dst);
  waitKey();

  return 0;
}

结果如下:

加载中,请稍后

mask1

\newline
加载中,请稍后
mask2

\newline
加载中,请稍后
dst

\newline


总结

主要记录bitwise_andbitwise_orbitwise_notbitwise_xor的作用,帮助理解与使用。

### starRC、LEF 和 DEF 文件的 EDA 工具使用教程 #### 关于 starRC 的使用说明 starRC 是由 Synopsys 开发的一款用于寄生参数提取 (PEX) 的工具,在 detail routing 完成之后被调用,以提供精确的电阻电容延迟分析数据[^2]。该工具能够处理复杂的多层互连结构并支持多种工艺节点。 对于 starRC 的具体操作指南,通常可以从官方文档获取最权威的信息。访问 Synopsys 官方网站的技术资源页面,可以找到最新的产品手册以及应用笔记等资料。此外,还可以通过在线帮助系统获得交互式的指导和支持服务。 #### LEF 和 DEF 文件格式解析及其在 Cadence 中的应用 LEF(Library Exchange Format)和 DEF(Design Exchange Format)是两种广泛应用于集成电路布局布线阶段的标准文件格式之一[^3]。前者主要用于描述标准单元库中的元件几何形状;后者则记录了整个芯片版图的设计信息,包括但不限于各个模块的位置关系、网络连接情况等重要细节。 当涉及到这些文件类型的编辑读取时,Cadence 提供了一系列强大的平台级解决方案,比如 Virtuoso Layout Editor 就可以直接打开并修改 LEF/DEF 格式的项目工程。为了更好地理解和运用这两种文件格式,建议参阅 Cadence 发布的相关培训材料是参加其举办的专项课程学习活动。 ```bash # 示例命令:查看 LEF DEF 文件内容 cat my_design.lef cat my_design.def ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Fshinech

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

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

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

打赏作者

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

抵扣说明:

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

余额充值