split()函数+merge()函数
在图像处理时,我们接触到的彩色以RGB居多,为了分析图像在某一通道上的特性,需要将图像的颜色通道进行分离,或者是在对某一颜色通道处理后重新进行融合。opencv提供了split()函数来进行颜色通道的分离,提供了merge()函数来进行颜色通道的融合。
1.split()函数
此函数的作用是将一个图像通道进行分离。
split()函数定义:
void split(const Mat& m, vector<mat>& mv );</mat>
参数说明:
- const Mat&类型的src,填我们需要进行分离的图像;
- vector<mat style="margin-top: 0px;">类型的mv,填函数的输出数组或者输出的vector容器,即分离后的图像;</mat>
2.merge()函数
merge()函数的功能是split()函数的逆向操作,将多个数组合并成一个多通道的数组。
merge()函数定义:
void merge(const vector<mat>& mv, OutputArray dst );</mat>
- const <mat style="margin-top: 0px;">类型的mv,填需要被合并的vector容器的阵列,这个mv参数中所有的矩阵必须有着一样的尺寸和深度;</mat>
- 保存为合并后的图像;
3.利用split()函数和阈值化去除票据上的印章,merge()函数合并图像
票据上往往会有一些红色印章把一些重要信息区域给覆盖了,比如一些开发票人员盖印章时比较随意,容易吧一些关键区域给遮蔽了,这让接下来的票据识别很困难,因此,我们必须先对票据图像进行一定的预处理来移除印章干扰,再进行字符识别,这样子识别准确率才有保证。
- 任务:我们需要识别发票的字体(红色盖章影响都我们的识别工作)


代码如下:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std; int main() {
//【1】定义相关变量
Mat srcImage, newImage;
Mat srcImage_B, srcImage_G, srcImage_R;
//【2】存放Mat的数组vector
vector<Mat> channels_BGR;
//【3】读取原始图像并检查图像是否读取成功
srcImage = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\02.jpg");
if (srcImage.empty())
{
cout << "读取图像有误,请重新输入正确路径!\n";
getchar();
return -1;
}
imshow("src原图像", srcImage); //在窗口显示原图像
//【4】对加载的原图像进行通道分离,即把一个3通道图像转换成为3个单通道图像
split(srcImage, channels_BGR);
//从数组中取出3种颜色,0通道为B分量,1通道为G分量,2通道为R分量。因为:RGB色彩空间在opencv中默认通道顺序为BGR!!!
srcImage_B = channels_BGR.at(0);
srcImage_G = channels_BGR.at(1);
srcImage_R = channels_BGR.at(2);
imshow("srcImage_B通道", srcImage_B); //分别显示R,G,B各个通道图像
imshow("srcImage_G通道", srcImage_G);
imshow("srcImage_R通道", srcImage_R); //【5】 全局二值化
Mat gray;
cvtColor(srcImage, gray, CV_RGB2GRAY);
int th = 170; //阈值要根据实际情况调整
Mat binary;
//CV_THRESH_BINARY代表阈值其中一种模式,
threshold(gray, binary, th, 255, CV_THRESH_BINARY);
Mat red_binary;
threshold(srcImage_R, red_binary, th, 255, CV_THRESH_BINARY);
imshow("灰色图 + 阈值处理 ", binary);
imshow("R通道+阈值处理", red_binary);
//【6】将3个单通道重新合并成一个三通道图像
merge(channels_BGR, newImage);
imshow("将R,G,B通道合并后的图像", newImage);
waitKey(0);
return 0; }
上述博文参考:https://www.jianshu.com/p/dcc9c29f10b4
split()函数+merge()函数的更多相关文章
- C++ Opencv split()通道分离函数 merge()通道合并函数 使用操作详解
一. split()通道分离函数 split()函数的C++版本有两个原型,他们分别是: C++: void split(const Mat& src, Mat*mvbegin);//& ...
- split函数和merge函数
split函数的主要功能是把一个彩色图像分割成3个通道,方便进一步的图像处理,具体说明如下: split Divides a multi-channel array into several sing ...
- Split字符串分割函数
非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg" Dim arrTest arr ...
- merge函数:R语言,根据相同的列或ID合并不同的文件
一般Excel就能实现根据相同的列或ID合并不同的文件,但对于大文件来说,比如几十个G的数据量,用Excel处理,不仅耗时,而且还会使电脑崩溃.R语言的优势就体现在这里了,处理大文件相当快. firs ...
- Oracle使用split和splitstr函数批量分隔字符串
/* * Oracle 创建 split 和 splitstr 函数 */ /* 创建一个表类型 */ ) / /* 创建 split 函数 */ CREATE OR REPLACE FUNCTION ...
- Js $.merge() 函数(合并两个数组内容到第一个数组)
定义和用法 $.merge() 函数用于合并两个数组内容到第一个数组. 语法 $.merge( first, second ) 参数 描述 first Array类型 第一个用于合并的数组,合并后 ...
- c++合并两个序列函数merge()和inplace_merge()
大家在写归并排序时是不是觉得合并两个序列有点麻烦,有快速的方法吗? 我们全部函数自己写,比如: #include<bits/stdc++.h> using namespace std; # ...
- SAS学习笔记7 合并语句(set、merge函数)
set函数:纵向合并数据集 set语句进行纵向合并.set语句的作用是将若干个数据集依次纵向连接,并存放到data语句建立的数据集中.若set后面只有一个数据集,此时相当于复制的作用 注:data语句 ...
- python中split()函数的用法
函数:split() Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(lis ...
随机推荐
- tomcat 环境变量配置 解决 The CATALINA_HOME environment variable is not defined correctly
文章目录 问题描述 解决方案 问题描述 已经配置好了JAVA_HOME,CLASSPATH,Path等系列环境变量,且正确配置了CATALINA_HOME值为D:\apache-tomcat-7.0. ...
- 获取redis实例中最大的top-N key
需求:获取redis实例中最大的top-N key 说明:由于redis 4.x才引入了memory usage keyname的语法.3.x不支持! db_ip=5.5.5.101 db_port= ...
- ArrayList、LinkedList区别(jdk8)
/** * jdk8 * ArrayList:底层动态数组实现(未初始化指定数组长度) * add():添加元素时,才初始化数组长度为10.容量不够时,动态扩容策略为: 原容量 + 原容量*0.5 * ...
- 安装sublime简易笔记
1.安装编码工具sublime text3(下载地址,软件管家网盘) 2.安装完成后,下载sublime text3中与python相关的插件:package control 进入package co ...
- Keep、小红书、美图…独角兽App能拿到新一轮救命钱吗?
大多数人热爱手机,不是因为时尚的外观或者结实的零部件,而是因琳琅满目的App赋予其太多的功能.智能手机最先是清理掉人类的零碎时间,现如今又开始肢解我们大块的时间,或者说,智能手机本身就是生活.在如此背 ...
- Vue.js 源码目录设计(二)
Vue.js 的源码都在 src 目录下,其目录结构如下. src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台的支持 ├── se ...
- pick the stone game
我该如何去触摸这类问题嘞! 取石子游戏 1堆石子有n个,两人轮流取. 先取者第1次可以取任意多个,但不能全部取完. 以后每次取的石子数不能超过上次取子数的2倍. 取完者胜.先取者负输出"Se ...
- Linux - Shell - 替换文件名中的空格
概述 使用 shell 替换 文件名中的空格 背景 尝试用 find 配合 xargs, 在多个文件里找关键字 出现了问题 有空格的文件名, 并不是很好处理 准备 os centos7 1. 问题: ...
- 【资源分享】Gmod日志记录脚本
*----------------------------------------------[下载区]----------------------------------------------* ...
- 用户登录(php)
<!DOCTYPE HTML><html><head><meta charset="utf-8"><script type=& ...