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

OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::colorChange 是 OpenCV 中用于调整图像颜色的函数。它允许你通过乘以不同的系数来独立地改变输入图像中红色、绿色和蓝色通道的强度,从而实现对图像色彩的调整。这个功能对于需要精细控制图像色调的应用非常有用。

函数原型

void cv::colorChange 	
(
        InputArray  	src,
		InputArray  	mask,
		OutputArray  	dst,
		float  	red_mul = 1.0f,
		float  	green_mul = 1.0f,
		float  	blue_mul = 1.0f 
	) 		

参数

  • 参数src 输入 8 位 3 通道图像‌34。
  • 参数mask 输入 8 位 1 或 3 通道图像‌35。
  • 参数dst 输出与 src 尺寸和类型相同的图像‌34。
  • 参数red_mul 红色通道乘法因子‌4。
  • 参数green_mul 绿色通道乘法因子‌4。
  • 参数blue_mul 蓝色通道乘法因子‌4。

乘法因子范围在 0.5 至 2.5 之间‌

示例代码


#include <iostream>
#include <opencv2/opencv.hpp>

int main()
{
    // 加载图像
    cv::Mat src = cv::imread("/media/dingxin/data/study/OpenCV/sources/images/jiangnan.jpg");
    if (src.empty())
    {
        std::cerr << "无法加载图像!" << std::endl;
        return -1;
    }

    // 创建全1掩模(处理整个图像)
    cv::Mat mask = cv::Mat::ones(src.size(), CV_8UC1);

    // 应用颜色变换(调整参数以增强效果)
    cv::Mat dst;
    cv::colorChange(src, mask, dst, 2.5f, 0.1f, 1.0f); // 红通道增强,绿通道减弱

    // 转换为浮点型计算差异
    cv::Mat src_f, dst_f;
    src.convertTo(src_f, CV_32F);
    dst.convertTo(dst_f, CV_32F);

    // 计算绝对差异并归一化‌:ml-citation{ref="1,2" data="citationList"}
    cv::Mat diff_f;
    cv::absdiff(src_f, dst_f, diff_f);
    cv::normalize(diff_f, diff_f, 0, 255, cv::NORM_MINMAX); // 关键修改:归一化数据范围‌:ml-citation{ref="1" data="citationList"}

    // 转换为8位图像
    cv::Mat diff;
    diff_f.convertTo(diff, CV_8U);

    // 增强对比度显示(调整缩放因子)‌:ml-citation{ref="2" data="citationList"}
    cv::Mat enhanced_diff;
    cv::convertScaleAbs(diff, enhanced_diff, 5, 0); // alpha=5 增强差异可见性‌:ml-citation{ref="2" data="citationList"}

    // 显示结果
    cv::imshow("Original Image", src);
    cv::imshow("Processed Image", dst);
    cv::imshow("Difference Image", diff);
    cv::imshow("Enhanced Difference", enhanced_diff);

    // 保存结果(建议使用无损格式)‌:ml-citation{ref="5" data="citationList"}
    cv::imwrite("original.png", src);
    cv::imwrite("processed.png", dst);
    cv::imwrite("difference.png", diff);
    cv::imwrite("enhanced_difference.png", enhanced_diff);

    cv::waitKey(0);
    return 0;
}

运行结果

在这里插入图片描述在这里插入图片描述

相关文章:

  • Spring实战spring-ai运行
  • fastapi+mysql实现问卷调查系统
  • DeepSeek+知识库+鸿蒙,助力鸿蒙高效开发
  • Java集合面试题(持续更新)
  • 动态规划01背包问题系列一>最后一块石头的重量II
  • Spring Boot使用JDBC /JPA访问达梦数据库
  • 安卓免费多功能工具:一站式解决 PDF 阅读、编辑、转换等需求
  • 基础算法总结
  • vue3:七、拦截器实现
  • PX4中的UAVCAN_V1的实现库libcanard与数据格式DSDL
  • 【微知】Mellanox驱动中to是什么?有哪些超时时间?(time out,心跳2s,reset 1分钟)
  • 正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介
  • 算法-图-dijkstra 最短路径
  • Linux线程机制
  • 使用joblib 多线程/多进程
  • 锂电池升压到5V并且可以锂电池充电的芯片SM5401
  • K8S学习之基础十六:k8s中Deployment更新策略
  • AUTOSAR—TM模块介绍及使用概要
  • 深入剖析 Kubernetes 弹性伸缩:HPA 与 Metrics Server
  • 文件解析:doc、docx、pdf
  • 前四月国家铁路发送货物12.99亿吨,同比增长3.6%
  • 俄乌刚谈完美国便筹划与俄乌领导人通话,目的几何?
  • 罗马教皇利奥十四世正式任职
  • 玉林一河段出现十年最大洪水,一村民被冲走遇难
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿
  • 卿晨璟靓等用服刑经历“引流”,专家:将犯罪问题娱乐化会消解刑罚严肃性