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

OpenCV计算摄影学(17)两个图像之间执行无缝克隆操作函数 seamlessClone()

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

算法描述

图像编辑任务涉及全局更改(如颜色/强度校正、滤镜应用、变形)或针对选定区域的局部更改。在这里,我们关注的是实现局部更改,即那些限制在手动选择的区域(ROI)内的更改,并且是以无缝且 effortless(轻松的,不费力的)方式进行的。更改的程度从轻微的扭曲到由全新内容完全替换不等。

cv::seamlessClone 是 OpenCV 库中用于图像处理的一个函数,它可以在两个图像之间执行无缝克隆操作。这种技术通常用于将一个图像的一部分(源图像)无缝地复制到另一个图像(目标图像)的指定位置上。

函数原型

oid cv::seamlessClone 	
(
 	InputArray  	src,
	InputArray  	dst,
	InputArray  	mask,
	Point  	p,
	OutputArray  	blend,
	int  	flags 
) 		

参数

  • 参数src 输入8位3通道图像。
  • 参数 dst 输入8位3通道图像。
  • 参数 mask 输入8位1或3通道图像。
  • 参数 p 目标图像dst中放置对象的点。
  • 参数 blend 输出图像,与dst具有相同的大小和类型。
  • 参数 flags 克隆方法,可以是cv::NORMAL_CLONE、cv::MIXED_CLONE或cv::MONOCHROME_TRANSFER。

代码示例

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

using namespace cv;
using namespace std;

int main()
{
    // 读取源图像和目标图像
    Mat src = imread( "/media/dingxin/data/study/OpenCV/sources/images/jiangnan.jpg" );
    Mat dst = imread( "/media/dingxin/data/study/OpenCV/sources/images/mask.png" );
    if ( src.empty() || dst.empty() )
    {
        cout << "图像加载失败,请检查图像路径是否正确。\n";
        return -1;
    }

    // 创建掩模,大小与源图像相同,类型为CV_8UC1
    Mat mask = Mat::ones( src.size(), CV_8UC1 ) * 255;

    // 定义在目标图像中的位置点p(即源图像中心放置的位置)
    Point p( dst.cols / 2, dst.rows / 2 );

    // 输出图像
    Mat blend;

    // 执行无缝克隆
    seamlessClone( src, dst, mask, p, blend, NORMAL_CLONE );

    // 显示结果
    imshow( "Source Image", src );
    imshow( "Destination Image", dst );
    imshow( "Blended Image", blend );
    waitKey( 0 );

    return 0;
}

运行结果

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

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

相关文章:

  • 设计模式-结构型模式-适配器模式
  • 【SpringMVC】深入解析@ RequestMapping 注解的概念及使用和 MVC 介绍
  • 利用可变参数模板,可打印任意参数和参数值。(C++很好的调式函数)
  • Deepseek可以通过多种方式帮助CAD加速工作
  • Docker和DockerCompose基础教程及安装教程
  • dify中使用NL2SQL
  • Java直通车系列15【Spring MVC】(ModelAndView 使用)
  • 计算机视觉|从0到1揭秘Diffusion:图像生成领域的新革命
  • SpreadVue实现内置excel在线编辑并保存为后端可以接受的json格式
  • Centos操作系统大全(附ISO镜像下载)
  • 电商项目-秒杀系统(五) 秒杀下单接口限流
  • 使用Modelsim手动仿真
  • 题目 3217 ⭐成绩统计⭐【滑动窗口 + 二分搜索】蓝桥杯2024年第十五届省赛
  • 大白话 CSS 中transform属性的常见变换类型(平移、旋转、缩放等)及使用场景
  • 管理 SELinux 安全性
  • 正则表达式详解
  • android13打基础: timepicker控件
  • Vue 3 ref(new Map()) 无法触发watch
  • 力扣35.搜索插入位置-二分查找
  • Linux网络配置(超详细)
  • 「Java EE开发指南」如何用MyEclipse构建一个Web项目?(二)
  • Go权限管理库Casbin和身份验证库jwt-go初试
  • 【2025】Electron + React 架构筑基——从零到一的跨平台开发
  • 电子学会—2024年12月青少年软件编程(图形化)四级等级考试真题——趣味点阵屏
  • 当中国“智算心跳”与全球共振:九章云极DataCanvas首秀MWC 2025
  • 快速掌握EasyOCR应用实战指南
  • Qt常用控件之表格QTableWidget
  • openharmony 软总线-设备发现流程
  • OSPF网络类型:NBMA与P2MP
  • K8s 1.27.1 实战系列(七)Deployment