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

opencv的加、减、溶合、位运算

1. 加法运算

(1) cv::add() 或 + 运算符

  • 功能:对两幅图像的像素值相加(饱和操作,防止溢出)。

  • 公式:dst(x,y)=saturate(src1(x,y)+src2(x,y))

  • 示例

    // C++
    cv::Mat img1 = cv::imread("image1.jpg");
    cv::Mat img2 = cv::imread("image2.jpg");
    cv::Mat result;
    cv::add(img1, img2, result);  // 或 result = img1 + img2;
    

(2) 加权加法 cv::addWeighted()

  • 功能:线性混合两幅图像(类似透明度叠加)。

  • 公式:dst(x,y)=α⋅src1(x,y)+β⋅src2(x,y)+γ

  • 示例

    // C++
    cv::addWeighted(img1, 0.7, img2, 0.3, 0, result);  // 70% img1 + 30% img2
    

2. 减法运算

(1) cv::subtract() 或 - 运算符

  • 功能:对两幅图像的像素值相减(结果非负)。

  • 公式:dst(x,y)=saturate(src1(x,y)−src2(x,y))

  • 示例

    // C++
    cv::subtract(img1, img2, result);  // 或 result = img1 - img2;
    

(2) 绝对值减法 cv::absdiff()

  • 功能:计算两幅图像差的绝对值(用于差异检测)。

  • 公式:dst(x,y)=∣src1(x,y)−src2(x,y)∣

  • 示例

    // C++
    cv::absdiff(img1, img2, result);  // 常用运动检测
    

3. 图像融合(Blending)

(1) 线性混合 addWeighted

  • 见前文 加权加法 部分。

(2) 掩膜混合 copyTo

  • 功能:通过掩膜(Mask)控制混合区域。

  • 示例

    // C++
    cv::Mat mask = cv::imread("mask.jpg", cv::IMREAD_GRAYSCALE);
    img2.copyTo(result, mask);  // 仅在 mask 非零处复制 img2
    

4. 位运算(Bitwise Operations)

适用于二值图像或掩膜操作。

函数作用示例
cv::bitwise_and()按位与(交集)cv::bitwise_and(img1, img2, dst)
cv::bitwise_or()按位或(并集)cv::bitwise_or(img1, img2, dst)
cv::bitwise_xor()按位异或(差异)cv::bitwise_xor(img1, img2, dst)
cv::bitwise_not()按位取反(反色)cv::bitwise_not(img1, dst)

示例代码

// C++
cv::Mat mask = cv::Mat::zeros(img1.size(), CV_8UC1);
cv::circle(mask, cv::Point(100,100), 50, cv::Scalar(255), -1); // 创建圆形掩膜

cv::Mat and_result, or_result, not_result;
cv::bitwise_and(img1, img2, and_result, mask);  // 带掩膜的按位与
cv::bitwise_or(img1, img2, or_result);
cv::bitwise_not(img1, not_result);              // 反色

5. 关键注意事项

  1. 数据类型一致
    参与运算的图像必须具有相同的尺寸、通道数和数据类型(如 CV_8UC3)。

  2. 饱和操作
    add() 和 subtract() 会限制结果在有效范围内(如 0~255)。

  3. 掩膜的作用
    位运算和 copyTo() 可通过掩膜控制操作区域。


应用场景

  • 加法:图像叠加(水印)、光照增强。

  • 减法:背景消除、运动检测。

  • 位运算:ROI 提取、二值图像处理。

  • 融合:图像合成、透明度效果。

通过灵活组合这些操作,可以实现复杂的图像处理效果!

http://www.dtcms.com/a/113077.html

相关文章:

  • Kafka 中,为什么同一个分区只能由消费者组中的一个消费者消费?
  • 文章记单词 | 第24篇(六级)
  • 【MATLAB TCP/IP客户端与NetAssist上位机双向通信实战指南】
  • Redis的公共操作命令
  • 探秘AI(003)之“通义AI”全栈AI能力引领智能化变革
  • 2025-04-05 吴恩达机器学习5——逻辑回归(2):过拟合与正则化
  • 安装gpu版本的dgl
  • Python解决“组成字符串ku的最大次数”问题
  • Airflow+Spark/Flink vs. Kettle
  • (一)前端程序员转安卓开发分析和规划建议
  • Dify票据识别遇到的分支判断不准确问题
  • 破解GenAI时代工业物联网落地难题:研华IoTSuite如何用“全栈技术“重构智造未来?
  • Roo Code使用MCP服务(大模型上下文协议)
  • 深度学习处理文本(13)
  • SSL证书过期会有什么影响
  • 奈氏准则和 香农定理
  • netty中的ServerBootstrap详解
  • thinkphp8.0上传图片到阿里云对象存储(oss)
  • 2025全新开源双端系统源码:获取通讯录、相册、短信、定位及已装应用信息
  • 程序环境和预处理
  • 第二章日志分析-redis应急响应笔记
  • 贪心算法的使用条件
  • 通义灵码:引领 AI 驱动的编程革命
  • 趣味逆商测试:了解你的逆境应对能力
  • 系统思考:思考的快与慢
  • 二叉树的前序中序后序遍历
  • DeFi漏洞利用与安全防护
  • Oracle数据库数据编程SQL<8 文本编辑器Notepad++和UltraEdit(UE)对比>
  • Python 变量
  • JVM虚拟机篇(二):深入剖析Java与元空间(MetaSpace)