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 ...
随机推荐
- MySQL进阶之存储引擎MyISAM与InnoDB的区别
一.存储引擎(表类型) 通常意义上,数据库就是数据的集合,具体到计算机数据库可以是存储器上一些文件的集合或一些内存数据的集合.我们通常说的MySQL数据库.sql Server数据库等其实是数据库管理 ...
- Bootstrap资料
Bootstrap手册 : https://www.jqhtml.com/bootstraps-syntaxhigh/index.html 中文文档 :https://v3.bootcss.com/ ...
- 2018ICPC南京站Problem J. Prime Game
题意: 对于所有数字分解质因子,如果某个质因子在这个区间出现,则贡献为1,求所有质因子对所有区间做的贡献. 解析: 考虑如果所有全部区间都有这个质因子则这个质因子的贡献是n*(n+1)/2,对于任意因 ...
- Hdu2099 整除的尾数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2099 Problem Description 一个整数,只知道前几位,不知道末二位,被另一个整数除尽了 ...
- [CF1304C] Air Conditioner
维护一区间 \([l,r]\) 人按照时间升序 考虑 \((l_i, h_i, t_i)\),当前的所有区间与这个区间取交 推到 \(t_{i+1}\) 时,所有区间的端点向两边扩张即可 注意把空掉的 ...
- [ZJOI2007] 仓库建设 - 斜率优化dp
大脑真是个很优秀的器官,做事情之前总会想着这太难,真的逼着自己做下去,回头看看,其实也不过如此 很朴素的斜率优化dp了 首先要读懂题目(我的理解能力好BUG啊) 然后设\(dp[i]\)表示处理完前\ ...
- vscode设置成中文
打开 VS Code Ctrl + Shift +p打开搜索框 搜索框内输入Configure Display Language 回车 修改代码中“locale”后面引号内内容为zh-CH 重新启动V ...
- C# asp.net 配置文件连接sql 数据库
先引用 using System.Configuration;//配置文件using System.Data.SqlClient; 我这里使用的是SqlServer 2008 sa 用户 密码也为s ...
- JavaDay1(下)
Java learning_Day1(上) 正式开始JavaSE的基础学习 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0G ...
- vue+muse-ui
1.可以很好的配合vue2.0开发 2.安装: npm install muse-ui --save 3.引入: 在main.js中加入 import Vue from 'vue' import M ...