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

opencv实现抠图,图像拼接,图像融合

在OpenCV中,你可以使用图像拼接、抠图和将图像的一部分放在另一张图片的指定位置。以下是示例代码,演示如何执行这些操作:

图像拼接

要将两张图像拼接在一起,你可以使用 cv::hconcat(水平拼接)和 cv::vconcat(垂直拼接)函数。下面是一个示例代码,演示如何水平拼接两张图像:

#include <opencv2/opencv.hpp>int main() {cv::Mat image1 = cv::imread("image1.jpg");cv::Mat image2 = cv::imread("image2.jpg");// 水平拼接cv::Mat concatenatedImage;cv::hconcat(image1, image2, concatenatedImage);cv::imshow("Concatenated Image", concatenatedImage);cv::waitKey(0);return 0;
}

抠图

要从图像中抠出一个区域,你可以使用 cv::Rect 对象来定义要抠出的区域,然后使用该区域来提取感兴趣的部分。以下是一个示例代码,演示如何从图像中抠出一个区域:

#include <opencv2/opencv.hpp>int main() {cv::Mat image = cv::imread("image.jpg");// 定义要抠图的区域cv::Rect roi(100, 100, 200, 200); // (x, y, width, height)// 提取感兴趣的部分cv::Mat croppedImage = image(roi);cv::imshow("Cropped Image", croppedImage);cv::waitKey(0);return 0;
}

将图像的一块放在另一张图片的指定位置

要将一张图像的一部分放置在另一张图片的指定位置,你可以使用 cv::Rect 对象来定义源图像中的区域,并使用该区域来提取要放置的部分,然后将提取的部分放置到目标图像的指定位置。以下是一个示例代码,演示如何执行这个操作:

#include <opencv2/opencv.hpp>int main() {cv::Mat sourceImage = cv::imread("source.jpg");cv::Mat targetImage = cv::imread("target.jpg");// 定义源图像中的区域cv::Rect sourceRect(50, 50, 100, 100); // (x, y, width, height)// 定义目标图像中的位置cv::Point targetPoint(200, 200); // (x, y)// 提取源图像中的区域cv::Mat sourceRegion = sourceImage(sourceRect);// 将提取的区域放置到目标图像的指定位置sourceRegion.copyTo(targetImage(cv::Rect(targetPoint.x, targetPoint.y, sourceRegion.cols, sourceRegion.rows)));cv::imshow("Target Image", targetImage);cv::waitKey(0);return 0;
}

在上述示例中,我们首先定义了源图像中的区域和目标图像中的位置,然后使用 cv::Rect 和 cv::Point 来表示它们。接下来,我们提取源图像中的区域,然后使用 copyTo 函数将提取的区域放置到目标图像的指定位置。

http://www.lryc.cn/news/186280.html

相关文章:

  • 照片处理软件Lightroom Classic mac中文版功能介绍(Lrc2021)
  • asp.net高校留学生信息管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • C# - Opencv应用(1) 之VS下环境配置详解
  • rsync 远程同步实现快速、安全、高效的异地备份
  • 医学访问学者面试技巧
  • 【19】c++设计模式——>桥接模式
  • 网络安全:六种常见的网络攻击手段
  • 使用HbuilderX运行uniapp中小程序项目
  • 基于PHP的水果商城网站,mysql数据库,前台+后台,原生PHP,PHP study(小皮),完美运行,有一万字报告。
  • 【uniapp】自定义导航栏时,设置安全距离,适配不同机型
  • JAVA经典百题之数组逆序输出
  • vue run dev 配置nginx
  • Python实现RNN算法对MFCC特征的简单语音识别
  • 借助PLC-Recorder,汇川中型PLC(AM、AC系列,CODESYS平台)2ms高速采集的方法
  • vscode package.json文件开头的{总是提升警告
  • $attrs 和 $listeners (vue2vue3)
  • 嵌入式系统中的加密性能:第2部分
  • STM32F103 最小系统 PCB 设计与原理
  • JVM篇---第十一篇
  • MongoDB——window11安装mongodb5.0.21版本服务端(图解版)
  • 第1次 更多的bash shell命令
  • 工业路由器项目应用(4g+5g两种工业路由器项目介绍)
  • 国产开源无头CMS,MyCms v4.7 快捷生成接口开发后台
  • C++(反向迭代器)
  • DataX和dataX-web 集群部署及使用
  • 常见的数据存储方案:选择合适的方式来管理您的数据
  • leetcode 221 最大正方形 + 1277 统计全为1的正方形子矩阵
  • yolov7车牌识别(12种中文车牌类型)
  • Mac PF命令防火墙
  • prototype-based learning algorithm(原型学习)