关于opencv通道的C++转化实现

2023-11-04

首先我是在visual2019上使用C++,因此测试之前要安装opencv的依赖包,可以上官网自行下载安装.
1.图像通道
(1)单通道图:每个像素点只有一个值(0-255),即我们常见的黑白图,称作灰度图。
(2)三通道图:每个像素点都有 3 个值表示,例如 RGB 图片即为三通道图片,是通过对红®、绿(G)、蓝(B)三个颜色通道之间的叠加来得到各式各样的颜色。
(3)二值图:二值图像是指在图像中,灰度等级只有两种,也就是说,图像中的任何像素灰度值不是0就是255,再无其他过渡的灰度值。是一种特殊的灰度图。
2.图片转化
首先实现RGB转灰度图
常用的函数
void cv::cvtColor(cv::InputArray src,cv::OutputArray dst, int code, int dstCn = 0 );
cv::InputArray src, // 输入图片
cv::OutputArray dst, // 输出图片
int code, // 颜色映射码(转换格式)
int dstCn = 0 // 输出的通道数 (0=‘automatic’)
网上找的图片侵删

测试代码1

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

using namespace cv;
using namespace std;
int main()
{
	Mat image = imread("C://Users//lenovo//Desktop//ffff.jpg");
	cout <<"Original Image channal:  "<< image.channels() << endl;
	imshow("Original Image", image);
	
	Mat gray;
	cvtColor(image, gray, COLOR_RGB2GRAY);
	
	imshow("gray Image", gray);
	cout <<"gray Image channal:  "<< gray.channels() << endl;
	// Wait until user press some key
	waitKey();
	return 0;
}

输出结果
在这里插入图片描述2.灰度图通道
灰度图也是有三通道的,做一个项目时读取灰度图,按照默认的三通道读取,发现在处理像素时只能处理1/3,导致浪费了一天的时间。
imread默认是读取三通道,后面标志位等于0是单通道。
Mat image = imread(“C://Users//lenovo//Desktop//ffff.jpg”);三
Mat image = imread(“C://Users//lenovo//Desktop//ffff.jpg”,0);单

Mat image = imread("C://Users//lenovo//Desktop//test.jpg",0);
	cout <<"Original Image channal:  "<< image.channels() << endl;
	imshow("Original Image", image);

在这里插入图片描述3.灰度图的单通道转三通道

Mat image = imread("C://Users//lenovo//Desktop//test.jpg",0);
	cout <<"Original Image channal:  "<< image.channels() << endl;
	imshow("Original Image", image);
	Mat gray;
	cvtColor(image, gray, COLOR_GRAY2BGR);
	imshow("gray Image", gray);
	cout <<"gray Image channal:  "<< gray.channels() << endl;
	// Wait until user press some key
	waitKey();
	return 0;

在这里插入图片描述4.三通道的通道分离与合并
(1)通道的分离
void split(const Mat& src, Mat* mvbegin);

Mat image = imread("C://Users//lenovo//Desktop//ffff.jpg",1);
	std::vector<Mat> channels;
	Mat imageBlueChannel;
	Mat imageGreenChannel;
	Mat imageRedChannel;

	//转换通道
	split(image, channels);
	imageBlueChannel = channels.at(0);
	imageGreenChannel = channels.at(1);
	imageRedChannel = channels.at(2);
	//显示分离的单通道图像
	imshow("origin image", image);
	imshow("blue channel", imageBlueChannel);
	imshow("green channel", imageGreenChannel);
	imshow("red channel", imageRedChannel);
	waitKey(0);
	return 0;

在这里插入图片描述
(2)merge()函数:split()函数的逆向操作——将多个数组合并成一个多通道数组,可以将上述获得的imageRedChannel整合到一张图中。
void merge(const Mat* mv, size_tcount, OutputArray dst);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于opencv通道的C++转化实现 的相关文章

  • 语言混合:模型和视图

    考虑开发一个应用程序 其中模型将使用 C 使用 Boost 编写 视图将使用 Objective C 使用 Cocoa Touch 编写 哪里有一些示例展示了如何集成 C 和 Objective C 来开发 iPhone 应用程序 直接从源
  • 在两个 .cpp 文件之间定义全局变量 [重复]

    这个问题在这里已经有答案了 如何在 A cpp 和 B cpp 之间共享 全球化 bool 变量 其中它们都不包含其他 h 文件 他们有其他联合头文件 但彼此没有 我可以在这些共享标头中定义全局变量吗 Thanks 我可以在这些共享标头中定
  • ProtoBuf-net AsReference 需要 Activator.CreateInstance 中的公共构造函数吗?

    在我的两门课程中 看起来像这样 最少 using System using System Collections Generic using System Collections using System ComponentModel us
  • C++ 有像 Pascal 一样的“with”关键字吗?

    withPascal 中的关键字可用于快速访问记录的字段 有人知道 C 是否有类似的东西吗 前任 我有一个包含许多字段的指针 但我不想这样输入 if pointer gt field1 pointer gt field2 pointer g
  • .NET Windows 服务中调用 C# 的 wait 的 I/O 回调是否可以不阻塞?

    我知道在 ASP NET 中 当使用 wait 时工作线程会返回到池中 而 I O 发生在后台 这对于可扩展性非常有用 我的 Windows 服务是一个套接字服务器 它使用 Begin End 样式的异步套接字 I O 混合我的魔法 我知道
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • C# ConfigurationManager 从 app.config 检索错误的连接字符串

    我有一个简单的 WinForms 应用程序 它最终将成为一个游戏 现在 我正在研究它的数据访问层 但遇到了障碍 我创建了一个单独的项目 名为DataAccess在其中 我创建了一个本地 mdfSQL Server 数据库文件 我还创建了一个
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • CMake 警告:无法为目标生成安全的链接器搜索路径

    在为 pcl 项目运行 CMake 时 我收到一条警告消息 Configuring done CMake Warning at CMakeLists txt 12 add executable Cannot generate a safe
  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 如何使用 C# 代码使用超链接的 onClick 事件?

    我正在尝试为页面中的超链接添加条件 而不是仅仅使用特定的链接 例如 a href help Tutorial html Tutorial a 我想为不同的用户显示不同的页面 例如 如果用户以管理员身份登录 他们将看到与普通用户不同的链接 我
  • AspNetCore.SignalR:无法启动未处于初始状态的连接

    我无法让 ASP NET Core SignalR 应用程序正常运行 我有这个服务器端代码 public class PopcornHub Hub private int Users public async Task BroadcastN
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • 统一;随机物体移动[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一款机器人战斗游戏 我希望敌人随机移动 然后有时会向敌人移动 我希望运动包含在其中的代码 else if avoid fal
  • 无效的模板相关成员函数模板推导 - 认为我正在尝试使用 std::set

    我有一个继承自基类模板的类模板 基类模板有一个数据成员和一个成员函数模板 我想从我的超类中调用它 我知道为了消除对成员函数模板的调用的歧义 我必须使用template关键字 我必须明确引用this在超级班里 this gt base mem
  • 请解释为什么Java和C对此代码给出不同的答案

    public class Test public static void main String args int i 10 i i System out println value of i is i 输出是 10 当我在中执行类似的代码

随机推荐

  • CocosCreator中TiledMap在真机无法读取, 浏览器和模拟器正常

    找到CocosCreator的安装路径 我这边是CocosCreator191 resources static build templates wx libs xmldom 打开dom js文件 找到第127行 将 copy ls lis
  • Ubuntu 通过 ssh 传输文件

    因为在 ubuntu 中 微信和qq不方便安装 为了便于不同电脑之间传输文件 便通过ssh 文章目录 ssh 客户端和服务端安装 简单使用 scp文件传输 免密传输 WindTerm ssh 客户端和服务端安装 安装 ssh 服务端 sud
  • 低功耗基础概念——Level Shifter cell补充

    文章目录 为什么现在的IC中高低电压差别不大 仍然需要LS level shifter H2L Level shifer L2H Level shifer Lib文件中对level shifter的描述 信号跨越不同级别电压模块进行驱动时
  • 【论文阅读】A CNN-Transformer Hybrid Approach for CropClassification Using MultitemporalMultisensor Images

    论文题目 利用多时相多传感器图像进行作物分类的CNN Transformer混合方法 目录 摘要 I INTRODUCTION II RELATE WORK A Ground Truth of Crop Types B Preprocess
  • QtWebApp介绍、下载和搭建http轻量级服务器Demo

    一 QtWebApp介绍 QtWepApp是一个C 中的HTTP服务器库 其灵感来自Java Servlet 适用于Linux Windows Mac OS和Qt Framework支持的许多其他操作系统 QtWebApp包含以下组件 HT
  • CTFshow-菜狗杯WP

    经过了48小时的奋战 在这次比赛中成功拿下4400分 同时也发现了自己的许多不足 MISC 杂项签到 下载附件后进行解压 发现是一张图片 通过二进制查看工具 WinHex 010 Editor 打开该图片 Ctrl F搜索文本 ctfsho
  • [Leetcode]回文数(python版)

    判断一个整数是否是回文数 回文数是指正序 从左向右 和倒序 从右向左 读都是一样的整数 示例1 输入 121 输出 true 示例2 输入 121 输出 false 解释 从左向右读 为 121 从右向左读 为 121 因此它不是一个回文数
  • 远程连接mysql失败异常,未配置权限,skip-name-resolve以及防火墙

    刚安装好 mysql之后 用 navicat 连接MySQL 是连不上的 mysql 默认是只能本地连接 如果需要远程连接 需要配置连接权限 我的mysql 版本是 MySQL 5 6 40 本地连接之后 需要重置密码 set passwo
  • Docker导出导入本地镜像

    镜像导出到本地 docker save o root images myminio tar myminio v1 root images myminio tar 新建镜像名 myminio v1 需导出镜像名 镜像导入 docker loa
  • sqli-labs(31-40)

    人过留名 雁过留声 人生天地间 凡有大动静处 必有猪头 Less 31 源码分析 和 Less 29 相似 就是参数使用双引号 括号引用了 注入的时候注意闭合即可 Less 32 源码分析 check addslashes 转义的字符有 反
  • 如何在PHP中以编程方式将Excel文件转换为PDF?试试Aspose

    Excel电子表格被广泛用于以行和列的形式存储和分析数据 但是 在各种情况下 需要先将Excel文件转换为PDF 然后才能通过Internet共享它们 为了自动将Excel转换为PDF 本文介绍了 如何使用PHP通过编程将Excel文件转换
  • 你们要的终极指南! 交易API接口

    股票API接口可谓是量化交易和金融工具中最重要的组成部分 一个高质量的交易API接口对于量化交易程序员而言可谓是福星 因其可使得程序员们进行后向测试 得到可靠的测试结果 验证自己制定的交易策略是否有效 甚至构建自己的财富主页 有可能成为下一
  • 主从架构&lua脚本-Redis(四)

    上篇文章介绍了rdb aof持久化 持久化RDB AOF Redis 三 https blog csdn net ke1ying article details 131148269 redis数据备份策略 写job每小时copy一份到其他目
  • Ubuntu22.04更换国内镜像源(阿里、网易163、清华、中科大)

    更换方法 Ubuntu采用apt作为软件安装工具 其镜像源列表记录在 etc apt source list文件中 首先将source list复制为source list bak备份 然后将source list内容改为需要的镜像源列表即
  • unity 在pc平台 重启应用程序

    void ReStart 延迟5秒启动 string strs new string echo off echo wscript sleep 5000 gt sleep vbs start wait sleep vbs start d 0
  • 深度学习训练营Resnet之鸟类识别

    深度学习训练营之鸟类识别 原文链接 理论知识储备 为什么会提出ResNet ResNet 环境介绍 前置工作 设置GPU 导入数据并进行查找 数据处理 可视化数据 配置数据集 残差网络的介绍 构建残差网络 模型训练 开始编译 结果可视化 训
  • jupyter虚拟环境连接内核失败

    当你的Jupyter一直显示 连接内核中 或者是404 那么不妨考虑是否是防火墙的问题 首先使用conda install ipykernel 这样可以在jupyter上看到内核 依次把对应的虚拟环境的目录下的python exe pyth
  • java工具之解析yaml文件

    工具使用背景 很多配置项都是使用yaml的格式进行配置的 按一定的格式进行缩进 一眼看上去 清晰明了 如Springboot工程下图所示 如 k8s的Deploy文件 本次写这个yaml工具解析是想解析k8s的config文件 然后封装一个
  • JAVA解析Json并输出所有属性值,多层次

    import com alibaba fastjson JSON import com alibaba fastjson JSONArray import com alibaba fastjson JSONObject import org
  • 关于opencv通道的C++转化实现

    首先我是在visual2019上使用C 因此测试之前要安装opencv的依赖包 可以上官网自行下载安装 1 图像通道 1 单通道图 每个像素点只有一个值 0 255 即我们常见的黑白图 称作灰度图 2 三通道图 每个像素点都有 3 个值表示