c++视觉--通道分离,合并处理,在分离的通道中的ROI感兴趣区域里添加logo图片
c++视觉–通道分离,合并处理
通道分离: split()函数
#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("1.jpg");// 检查图像是否成功加载if (image.empty()) {std::cerr << "Error: Could not read the image." << std::endl;return -1;}// 分离通道std::vector<cv::Mat> channels;cv::split(image, channels);// channels[0] 是蓝色通道// channels[1] 是绿色通道// channels[2] 是红色通道// 显示原始图像和分离的通道cv::imshow("Original Image", image);cv::imshow("蓝色 Channel", channels[0]);cv::imshow("绿色 Channel", channels[1]);cv::imshow("红色 Channel", channels[2]);// 等待按键cv::waitKey(0);return 0;
}

再将拆开后的单通道进行对比度处理后进行合并
#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("1.jpg");// 检查图像是否成功加载if (image.empty()) {std::cerr << "Error: Could not read the image." << std::endl;return -1;}// 分离通道std::vector<cv::Mat> channels;cv::split(image, channels);// channels[0] 是蓝色通道// channels[1] 是绿色通道// channels[2] 是红色通道// 显示原始图像和分离的通道cv::imshow("Original Image", image);cv::imshow("蓝色 Channel", channels[0]);cv::imshow("绿色 Channel", channels[1]);cv::imshow("红色 Channel", channels[2]);for (cv::Mat& channel : channels) {// 在这里可以对每个通道进行你想要的处理cv::equalizeHist(channel, channel);}cv::imshow("Original Image", image);cv::imshow("蓝色对比度增加 Channel", channels[0]);cv::imshow("绿色对比度增加 Channel", channels[1]);cv::imshow("红色对比度增加 Channel", channels[2]);// 合并通道cv::Mat processedImage;cv::merge(channels, processedImage);// 显示原始图像和处理后的图像cv::imshow("合并 Image", processedImage);// 等待按键cv::waitKey(0);return 0;
}

在分离的通道中的ROI感兴趣区域里添加logo图片
#include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image = cv::imread("1.jpg");cv::Mat logo = cv::imread("4.jpg",0);// 检查图像是否成功加载if (image.empty()) {std::cerr << "Error: Could not read the image." << std::endl;return -1;}// 分离通道std::vector<cv::Mat> channels;cv::split(image, channels);// channels[0] 是蓝色通道// channels[1] 是绿色通道// channels[2] 是红色通道// 显示原始图像和分离的通道cv::imshow("Original Image", image);cv::imshow("蓝色 Channel", channels[0]);cv::imshow("绿色 Channel", channels[1]);cv::imshow("红色 Channel", channels[2]);for (cv::Mat& channel : channels) {// 在这里可以对每个通道进行你想要的处理cv::equalizeHist(channel, channel);}cv::imshow("Original Image", image);cv::imshow("蓝色对比度增加 Channel", channels[0]);cv::imshow("绿色对比度增加 Channel", channels[1]);cv::imshow("红色对比度增加 Channel", channels[2]);//在分离的通道中的ROI感兴趣区域里添加logo图片cv::Rect roiRect(100, 250, logo.cols, logo.rows);// 提取感兴趣区域(ROI)cv::Mat imageROI = channels[0](roiRect);// 将logo复制到感兴趣区域logo.copyTo(imageROI);cv::imshow("蓝色对比度增加logo区域 Channel", channels[0]);// 合并通道cv::Mat processedImage;cv::merge(channels, processedImage);// 显示原始图像和处理后的图像cv::imshow("合并 Image", processedImage);// 等待按键cv::waitKey(0);return 0;
}

相关文章:
c++视觉--通道分离,合并处理,在分离的通道中的ROI感兴趣区域里添加logo图片
c视觉–通道分离,合并处理 通道分离: split()函数 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg");// 检查图像是否成功加载if (image.empty()) {std::cerr << "Error: Could not read the…...
python爬虫:多线程收集/验证IP从而搭建有效IP代理池
目录 一、前言 二、IP池的实现 1. 收集代理IP 2. 验证代理IP可用性 3. 搭建IP代理池 三、多线程实现 四、代理IP的使用 五、总结 一、前言 在网络爬虫中,IP代理池的作用非常重要。网络爬虫需要大量的IP地址来发送请求,同时为了降低被封禁的风险…...
阻塞队列以及阻塞队列的一个使用
阻塞队列以及阻塞队列的一个使用 阻塞队列简介 阻塞队列(Blocking Queue)是一种常见的队列数据结构,它具有特殊的行为,可以用于多线程编程中,以协调不同线程之间的任务执行和数据传递。阻塞队列在多线程环境中非常有…...
kafka的请求处理机制
目录 前言: kafak是如何处理请求的? 控制请求与数据类请求 参考资料 前言: 无论是 Kafka 客户端还是 Broker 端,它们之间的交互都是通过“请求 / 响应”的方式完成的。比如,客户端会通过网络发送消息生产请求给 B…...
Linux系统管理:虚拟机Centos Stream 9安装
目录 一、理论 1.Centos Stream 9 二、实验 1.虚拟机Centos Stream 9安装准备阶段 2.安装Centos Stream 9 3.进入系统 一、理论 1.Centos Stream 9 (1) 简介 CentOS Stream 是一种 Linux 操作系统。安装此操作系统的难题在于,在安装此系统之前,…...
5种排序算法
文章目录 一,排序算法时间复杂度比较二,插入排序三,冒泡排序四,快速排序五,堆排序六,二分归并排序 一,排序算法时间复杂度比较 算法最坏情况下平均情况下插入排序O(n )O(n)冒泡排序O(n)O(n)快速…...
TCP/IP(七)TCP的连接管理(四)
一 全连接队列 nginx listen 参数backlog的意义 nginx配置文件中listen后面的backlog配置 ① TCP全连接队列概念 全连接队列: 也称 accept 队列 ② 查看应用程序的 TCP 全连接队列大小 实验1: ss 命令查看 LISTEN状态下 Recv-Q/Send-Q 含义附加:…...
LeetCode【84】柱状图中的最大矩形
题目: 思路: https://blog.csdn.net/qq_28468707/article/details/103682528 https://www.jianshu.com/p/2b9a36a548fa 清晰 代码: public int largestRectangleArea(int[] heights) {int[] heightadd new int[heights.length 1];for (i…...
C++:关于模拟实现vector和list中迭代器模块的理解
文章目录 list和vector的迭代器对比list的实现过程完整代码 本篇是关于vector和list的模拟实现中,关于迭代器模块的更进一步理解,以及在前文的基础上增加对于反向迭代器的实现和库函数的对比等 本篇是写于前面模拟实现的一段时间后,重新回头…...
HTML 笔记 表格
1 表格基本语法 tr:table row th:table head 2 表格属性 2.1 基本属性 表格的基本属性是指表格的行、列和单元格但并不是每个表格的单元格大小都是统一的,所以需要设计者通过一些属性参数来修改表格的样子,让它们可以更更多样…...
3.1 C/C++ 使用字符与指针
C/C语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。…...
[代码学习]einsum详解
einsum详解 该函数用于对一组输入 Tensor 进行 Einstein 求和,该函数目前仅适用于paddle的动态图。 Einstein 求和是一种采用 Einstein 标记法描述的 Tensor 求和,输入单个或多个 Tensor,输出单个 Tensor。 paddle.einsum(equation, *opera…...
女性必看——“黄体破裂”到底有多可怕?
前几天的亚运会上发生了这样一件事: 雅思敏(化名)是一名国外皮划艇运动员,在亚运会上奋力完成皮划艇比赛后,突然开始 剧烈腹痛、面色苍白,大汗淋漓,经过进一步检查,确诊卵巢黄体破裂…...
colab切换目录的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
基于SSM的生活缴费系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
【WebLogic】WebLogic 2023年7月补丁导致JVM崩溃的解决方案
受影响版本: Oracle WebLogic 12c(12.2.1.4.0)Oracle WebLogic 14c(14.1.1.0.0) 问题描述: Oracle官方在2023年7月发布的最新版本的OPatch(13.9.4.2.13)存在一个新出现的Bug&#…...
简单OpenSL ES学习
初识OpenSL ES OpenSL ESObjects和Interfaces 所有的Object在OpenSl里面我们拿到的都是一个SLObjectItf:SLObjectItf_创建引擎创建过程要设计得这么麻烦?(object的生命周期)这么多参数,参数类型这么多学习障碍太大&…...
Linux网络编程- struct packet_mreq setsockopt()
struct packet_mreq struct packet_mreq 是一个数据结构,用于 Linux 中的原始数据包套接字,当我们想改变套接字的行为以接收特定类型的数据包时,它与 setsockopt() 函数配合使用。 下面是 struct packet_mreq 的定义: struct p…...
C++学习day4
作业: 1> 思维导图 2> 整理代码 1. 拷贝赋值函数课上代码 //拷贝赋值函数课上代码 #include<iostream> using namespace std;//创建类 class Stu { private://私有的string name;int socer;int *age;//此处注意用到指针类型 public://共有的//无参构…...
从零学算法54
54.给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到…...
Windows下用MSYS2编译axel多线程下载工具的保姆级教程(附常见错误解决方案)
Windows下MSYS2编译axel多线程下载工具全指南 如果你厌倦了商业下载工具的臃肿和限制,又对Python多线程下载的稳定性不满,那么编译一个原生的axel多线程下载工具可能是最佳选择。本文将带你从零开始在Windows环境下,通过MSYS2完整编译axel&a…...
终极指南:procs如何彻底改变DevOps工作流?监控、调试、优化的完整解决方案
终极指南:procs如何彻底改变DevOps工作流?监控、调试、优化的完整解决方案 【免费下载链接】procs A modern replacement for ps written in Rust 项目地址: https://gitcode.com/gh_mirrors/pr/procs procs是一款用Rust编写的现代进程查看工具&a…...
NVIDIA vGPU许可服务器HA配置避坑指南:从环境准备到故障切换测试
NVIDIA vGPU许可服务器高可用配置实战:从零搭建到容灾验证 在虚拟化与AI计算融合的今天,NVIDIA vGPU技术已成为图形工作站、云游戏和机器学习平台的核心支撑。但许多团队在享受显卡虚拟化红利时,往往忽略了许可服务的高可用保障——当单点故障…...
ncmdumpGUI+解决网易云音乐NCM文件跨设备播放痛点
ncmdumpGUI解决网易云音乐NCM文件跨设备播放痛点 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 问题场景:被加密的音乐自由 想象这样的场景&…...
高效文件同步:SyncTrayzor在Windows上的完整解决方案
高效文件同步:SyncTrayzor在Windows上的完整解决方案 【免费下载链接】SyncTrayzor Windows tray utility / filesystem watcher / launcher for Syncthing 项目地址: https://gitcode.com/gh_mirrors/sy/SyncTrayzor SyncTrayzor是Windows平台上最实用的Syn…...
差点被这套AI工具搞离职...搞懂MCP和Skill后,我发现宇宙的尽头是“写小作文”
剥开神秘面纱前两天,隔壁组的新人小王差点被开除。这小子为了赶进度,搞了个瞎折腾的操作:把公司一个十几万行的老旧核心项目,一股脑全扔进 Cursor 里,连哄带骗地让 AI 帮他重构。结果呢?跑出来的代码简直是…...
告别‘Hello World’:用Gin框架从零搭建一个带用户登录和文件上传的Web服务(Go 1.21+)
告别‘Hello World’:用Gin框架从零搭建一个带用户登录和文件上传的Web服务(Go 1.21) 当你已经掌握了Go语言的基础语法,接下来最令人兴奋的莫过于亲手构建一个真实的Web服务。Gin框架以其高性能和简洁的设计,成为Go开发…...
别再手动装Office了!用Docker和LinuxServer.io镜像,5分钟搞定LibreOffice在线办公环境
5分钟极速部署:用Docker打造即开即用的LibreOffice云办公环境 你是否经历过这样的崩溃时刻?临时需要处理一份文档,却发现系统里的办公软件版本老旧、字体缺失;或是刚重装系统,又要花半小时等待Office安装进度条爬完。更…...
FPGA小白也能懂:用Verilog在Xilinx Vivado里驱动HC-SR04超声波模块(附完整仿真)
FPGA实战:从零构建超声波测距系统(VerilogVivado全流程解析) 第一次接触FPGA时,最让人头疼的莫过于如何将抽象的硬件描述语言转化为实际可运行的电路。去年我在指导电子设计竞赛时,发现学生们对超声波模块的应用需求很…...
Phi-3 Forest Lab企业应用:金融研报关键数据提取+趋势归纳AI助理
Phi-3 Forest Lab企业应用:金融研报关键数据提取趋势归纳AI助理 1. 金融研报处理的行业痛点 金融分析师每天需要处理大量研报,从中提取关键数据并归纳趋势。传统人工处理方式面临三大挑战: 效率瓶颈:阅读一份20页的研报平均耗时…...
