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

发布于:2025-04-07 ⋅ 阅读:(16) ⋅ 点赞:(0)

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 提取、二值图像处理。

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

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


网站公告

今日签到

点亮在社区的每一天
去签到