当前位置: 首页 > news >正文

OpenCV 图像像素的逻辑操作


一、知识点
1、图像像素的逻辑操作,指的是位操作bitwise,与、或、非、异或等。

2、位操作简介:
 

  位1     位2     与and     或or     异或xor0       0        0        0         00       1        0        1         11       0        0        1         11       1        1        1         0


  
3、void rectangle(InputOutputArray img, Rect rec, const Scalar & color, int thickness = 1, int lineType = LINE_8, int shift = 0);
  (1)、在图像上绘制或填充一个矩形。
  (2)、参数说明:
      img: 输入、输出参数,表示要绘制或填充矩形的图像。
      rec: 定义了矩形左上角位置、宽、高。
      color: 矩形线框或填充的颜色。
      thickness: >0时表示矩形线框粗细,<0时表示填充矩形。
      lineType: 线条的类型,如8连通、4连通。
      shift: 点坐标中的小数位数。
      
4、void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
  (1)、执行两个数组的位与操作。
  (2)、参数说明:
      src1: 第一个输入数组。
      src2: 第二个输入数组。 src1和src2大小和类型得相同。
      dst: 输出数组,src1 & src2的结果数组。
      mask: 掩码数组,可选。 这个数组是8位单通道,且大小和输入数组相同,只有掩码中的非零元素对应的输入数组元素才会进行位与操作。 未指定掩码,则对整个输入数组进行位与操作。

5、void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
  (1)、执行两个数组的位或操作。
  (2)、参数说明:
      src1: 第一个输入数组。
      src2: 第二个输入数组。 src1和src2大小和类型得相同。
      dst: 输出数组,src1 | src2的结果数组。
      mask: 掩码数组,可选。 这个数组是8位单通道,且大小和输入数组相同,只有掩码中的非零元素对应的输入数组元素才会进行位或操作。 未指定掩码,则对整个输入数组进行位或操作。

6、void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, InputArray mask = noArray());
  (1)、执行两个数组的异或操作。
  (2)、参数说明:
      src1: 第一个输入数组。
      src2: 第二个输入数组。 src1和src2大小和类型得相同。
      dst: 输出数组,src1 ^ src2的结果数组。
      mask: 掩码数组,可选。 这个数组是8位单通道,且大小和输入数组相同,只有掩码中的非零元素对应的输入数组元素才会进行异或操作。 未指定掩码,则对整个输入数组进行异或操作。

7、void bitwise_not(InputArray src, OutputArray dst, InputArray mask = noArray());
  (1)、取反数组的每一位。
  (2)、参数说明:
      src: 输入数组。
      dst: 输出数组,!src的结果数组。
      mask: 掩码数组,可选。 这个数组是8位单通道,且大小和输入数组相同,只有掩码中的非零元素对应的输入数组元素才会进行取反操作。 未指定掩码,则对整个输入数组进行取反操作。

二、示例代码:

#include <iostream>
#include <opencv2/opencv.hpp>int main()
{cv::Mat m1 = cv::Mat::zeros(256, 256, CV_8UC3);cv::Mat m2 = cv::Mat::zeros(256, 256, CV_8UC3);cv::rectangle(m1, cv::Rect(100, 100, 80, 80), cv::Scalar(255, 255, 0), -1, cv::LINE_8, 0);cv::rectangle(m2, cv::Rect(150, 150, 80, 80), cv::Scalar(0, 255, 255), -1, cv::LINE_8, 0);cv::imshow("m1", m1);cv::imshow("m2", m2);//两个矩形相交部分是(150, 150)到(180, 180)之间。//两个矩形相交部分经过与后, 结果为BGR(0, 255, 0); 图像其它像素经过与后,结果为BGR(0, 0, 0)。cv::Mat dst1;cv::bitwise_and(m1, m2, dst1);cv::imshow("bitwise_and", dst1);//两个矩形相交部分经过或后,结果为BGR(255, 255, 255); 两个矩形不相交部分原先是什么颜色, 或后结果仍为什么颜色; 图像其它像素经过或后,结果为BGR(0, 0, 0)。cv::Mat dst2;cv::bitwise_or(m1, m2, dst2);cv::imshow("bitwise_or", dst2);//两个矩形相交部分经过异或后,结果为BGR(255, 0, 255); 两个矩形不相交部分原先是什么颜色, 或后结果仍为什么颜色; 图像其它像素经过或后,结果为BGR(0, 0, 0)。cv::Mat dst3;cv::bitwise_xor(m1, m2, dst3);cv::imshow("bitwise_xor", dst3);//m1矩形经过非后,结果为BGR(0, 0, 255); 图像其它像素经过非后,结果为BGR(255, 255, 255)。cv::Mat dst4;cv::bitwise_not(m1, dst4);cv::imshow("bitwise_not", dst4);cv::waitKey(0);return 0;
}

运行结果:

http://www.lqws.cn/news/154765.html

相关文章:

  • 【CPU】英特尔酷睿Ultra 5 225H与Ultra7 258V(Lunar Lake架构)PK
  • Sublime Text4 4192 安装
  • 解决el-select选择框右侧下拉箭头遮挡文字问题
  • DASCTF
  • buuctf——web刷题第二页
  • MCP协议在LLM系统中的架构与实现原理研究
  • `sendto()` / `recvfrom()` - 发送/接收数据(UDP)
  • PX4 | 无人机关闭磁力计罗盘飞行(yaw estimate error报错解决方法)
  • react私有样式处理
  • React---day9
  • Educational Codeforces Round 179 (Rated for Div. 2)
  • centos查看开启关闭防火墙状态
  • Java高级 | 【实验五】Spring boot+mybatis操作数据库
  • 获取KIMI API以及API key
  • Jenkins实现自动化部署Springboot项目到Docker容器(Jenkinsfile)
  • IDM 免费安装使用方法,支持6.42版本,实时更新
  • 查看本机显卡信息
  • 华为云Flexus+DeepSeek征文 | 基于DeepSeek-V3构建企业知识库问答机器人实战
  • 不等式中的放缩法
  • Java中List的forEach用法详解
  • 总结vxe-grid的一些用法
  • Jenkins | Linux环境部署Jenkins与部署java项目
  • vscode 离线安装第三方库跳转库
  • 更新Java的环境变量后VScode/cursor里面还是之前的环境变量
  • Github Copilot新特性:Copilot Spaces-成为某个主题的专家
  • 【已解决】MACOS M4 芯片使用 Docker Desktop 工具安装 MICROSOFT SQL SERVER
  • openvino如何在c++中调用pytorch训练的模型
  • 阿里云ACP云计算备考笔记 (3)——云存储RDS
  • HttpServletRequest常用方法
  • 第六个微信小程序:教师工具集