Open CV初学(一)

一、图片的读入与写出

(1)imread(src,int flag);其中,src为读取图片存放的路径,flag为对图片的灰度设置,可取如下值:

enum
{
/* 8bit, color or not */
   CV_LOAD_IMAGE_UNCHANGED  =-1,   //这个标识在新版本中被废置了,忽略
/* 8bit, gray */
   CV_LOAD_IMAGE_GRAYSCALE  =0,   //如果取这个标识的话,始终将图像转换成灰度1
/* ?, color */
   CV_LOAD_IMAGE_COLOR      =1,  // 如果取这个标识的话,总是转换图像到彩色一体
/* any depth, ? */
   CV_LOAD_IMAGE_ANYDEPTH   =2,  // 如果取这个标识的话,若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回
/* ?, any color */
   CV_LOAD_IMAGE_ANYCOLOR   =4
};

(2)imread(imagename,image);其中,src为读取图片存放的路径,flag为对图片的灰度设置,可取如下值:imshow("【3】logo图",logo);(3)通道分离,split(srcImage,channels);其中srcImage为处理图片对象,Channels为分离的三通道;(4)通道分离后各分离颜色的 ,imageBlueChannel=channels.at(0); //分离蓝色通道(5)对图像进行加权叠加处理;addWeighted(imageBlueChannel(Rect(0,0,logoImage.cols,logoImage.rows)),0.5,logoImage,0.5,0.,  imageBlueChannel(Rect(0,0,logoImage.cols,logoImage.rows))); 
  1. void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype=-1);
  • 第一个参数,InputArray类型的src1,表示需要加权的第一个数组,常常填一个Mat。
  • 第二个参数,alpha,表示第一个数组的权重
  • src2,表示第二个数组,它需要和第一个数组拥有相同的尺寸和通道数
  • 第四个参数,beta,表示第二个数组的权重值
  • 第五个参数,dst,输出的数组,它和输入的两个数组拥有相同的尺寸和通道数。
  • 第七个参数,dtype,输出阵列的可选深度,有默认值-1。;当两个输入数组具有相同的深度时,这个参数设置为-1(默认值),即等同于src1.depth()

(6)分离后的通道在与图片进行混合处理,merge(channels,srcImage); 
(7)重设图片大小;resize(srcImage,sizeImage1,Size(950,600),0,0,CV_INTER_LINEAR);其中把srcImage图片的大小设置为950*600,
处理完后赋值给sizeImage1;

(8)案例

bool MultichannelBlending()
{
Mat srcImage;   //定义变量
Mat logoImage;
vector<Mat>channels;  //定义通道Mat结构数组
Mat imageBlueChannel;
Mat sizeImage1;
logoImage=imread("D:\\program files\\opencvtest\\opencvtest1\\pic\\hualogo.jpg",0);  //载入图片,并赋值给logoImage,其中第二个参数使用三通道时不可省
srcImage=imread("D:\\program files\\opencvtest\\opencvtest1\\pic\\huage.jpg");     //载入图片,并赋值给srcImage
if(!logoImage.data ) { printf("Oh,no,读取logoImage错误~!\n"); return false; }
if(!srcImage.data){printf("oh, no,读取srcImage错误1~");}
split(srcImage,channels);//分离色彩通道 ,把一个3通道图像转换成3个单通道图像
imageBlueChannel=channels.at(0); //分离蓝色通道
addWeighted(imageBlueChannel(Rect(0,0,logoImage.cols,logoImage.rows)),0.5,logoImage,0.5,0.,imageBlueChannel(Rect(0,0,logoImage.cols,logoImage.rows)));
merge(channels,srcImage);
resize(srcImage,sizeImage1,Size(950,600),0,0,CV_INTER_LINEAR);  //重设图片大小并赋值给sizeImage1
namedWindow("华哥美照+logo蓝色通道 by tina");
imshow("华哥美照+logo蓝色通道 by tina",sizeImage1);
Mat  imageGreenChannel;
logoImage=imread("D:\\program files\\opencvtest\\opencvtest1\\pic\\hualogo.jpg",0);
srcImage=imread("D:\\program files\\opencvtest\\opencvtest1\\pic\\huage.jpg");
if(!logoImage.data ) { printf("Oh,no,读取logoImage错误~!\n"); return false; }
if(!srcImage.data ) { printf("Oh,no,读取srcImage错误~!\n"); return false; }
split(srcImage,channels);//分离色彩通道
imageGreenChannel=channels.at(1);    //分离green
addWeighted(imageGreenChannel(Rect(0,0,logoImage.cols,logoImage.rows)),0.0,logoImage,0.5,0.,imageGreenChannel(Rect(0,0,logoImage.cols,logoImage.rows)));
merge(channels,srcImage);
resize(srcImage,sizeImage1,Size(950,600),0,0,CV_INTER_LINEAR);
namedWindow("华哥美照+logo绿色通道 by tina");
imshow("华哥美照+logo绿色通道 by tina",sizeImage1);
Mat  imageRedChannel;
logoImage=imread("D:\\program files\\opencvtest\\opencvtest1\\pic\\hualogo.jpg",0);
srcImage=imread("D:\\program files\\opencvtest\\opencvtest1\\pic\\huage.jpg");
if(!logoImage.data ) { printf("Oh,no,读取logoImage错误~!\n"); return false; }
if(!srcImage.data ) { printf("Oh,no,读取srcImage错误~!\n"); return false; }
split(srcImage,channels);//分离色彩通道
imageRedChannel=channels.at(2);//分离红色通道
addWeighted(imageRedChannel(Rect(0,0,logoImage.cols,logoImage.rows)),0.0,logoImage,0.5,0.,imageRedChannel(Rect(0,0,logoImage.cols,logoImage.rows)));
merge(channels,srcImage);
resize(srcImage,sizeImage1,Size(950,600),0,0,CV_INTER_LINEAR);//重设图片大小
namedWindow("华哥美照+logo红色通道 by tina");
imshow("华哥美照+logo红色通道 by tina",sizeImage1);
return true;
}

运行结果图:

时间: 2024-10-06 00:24:04

Open CV初学(一)的相关文章

cv:显示Linux命令运行进度

cv: 显示 cp.mv 等命令的进度 2014-07-14 By toy Posted in Apps Edit on GitHub 在 Linux 系统中 , 大多数命令从来都是信奉 “ 沉默是金 ” 的准则 , 所以当我们利用 cp 复制文件的时候并不能看到所谓的进度条 . 如果你在意这一点 , 那么不妨来用用 cv. cv 是 Coreutils Viewer, 它能够显示传输数据的进度 , 包括百分比 . 大小 . 以及速率等信息 .cv 支持 coreutils 中的基本命令 , 比

[转载+原创]Emgu CV on C# (四) —— Emgu CV on 二值化

重点介绍了二值化原理及数学实现,并利用emgucv方法编程实现. 一.理论概述(转载,如果懂图像处理,可以略过,仅用作科普,或者写文章凑字数)  1.概述 图像二值化是图像处理中的一项基本技术,也是很多图像处理技术的预处理过程. 图像的预处理在进行图像二值化操作前要对图像进行预处理,包括彩色图像灰化和增强.由于选取阈值需要参照直方图,因此在图像进行处理后,我们再获取图像的直方图以帮助选取阈值.整个流程如下所示: 读取图像→灰度图像→图像增强→图像直方图→二值化处理 2.数学原理(转载,基本可以不

STM32初学Keil4编译时出现 Error:Failed to execute &#39;BIN40/Armcc&#39;

一种是在系统开始--运行里输入cmd,查看armcc状态.详情见推文: http://blog.csdn.net/hicui/article/details/7350805(笔记记录,请勿见怪) 都没有问题的话,那么可以尝试: 在keil里的菜单栏依次选择Project->Manage->Components,Environment andBooks(CEB)(或者直接点击工具栏的图标), 然后在CEB里选择Folders/Extensions标签页,在RealView Folder里选择ke

mongodb 初学 目录

mongodb 初学 索引 啦啦啦 MongoDB 教程 NoSQL 简介 MongoDB 简介 Windows 平台安装 MongoDB Linux平台安装MongoDB mongodb 在 Ubuntu系统上的安装及卸载 Mongodb启动命令mongod参数说明 Mac OSX 平台安装 MongoDB MongoDB 概念解析 MongoDB - 连接 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB 插入文档 MongoDB 更新文档 MongoDB 删除文档 M

初学ArcGIS API for JavaScript

初学ArcGIS API for JavaScript 对于初学者来说,关于esri提供的一些样式和dojo自带的一些样式还是需要有一定的了解,这块在<WebGIS开发从基础到实践>讲解的特别详细,在这里以笔记的形式来帮助自己加以理解和记忆. esri.css样式主要用于ESRI提供的小部件与组件,比如地图.信息框等.此外,还可以引用Dojo提供的样式表,Dojo提供了4组样式,分别是claro\tundra\soria以及nihilo,每种是一组定义用户界面的字体.颜色与大小等设置.在Arc

CV:object detection(LBP)

LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子:它具有旋转不变性和灰度不变性等显著的优点.它是首先由T. Ojala, M.Pietik?inen, 和 D. Harwood 在1994年提出,用于纹理特征提取.而且,提取的特征是图像的局部的纹理特征: 1.LBP特征的描述 原始的LBP算子定义为在3*3的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0.这样

初学 Python(十一)——切片

初学 Python(十一)--切片 初学 Python,主要整理一些学习到的知识点,这次是切片. #-*- coding:utf-8 -*- ''''' 切片 ''' L = ['name','age','sex','address','company'] #取前2个 print L[0:2] print L[:2] #取倒数第一个 print L[-1] #取后两个 print L[-2:] #取倒数第二个 print L[-2:-1] print len(L) #隔一个数取一次,从第一个数开

【Python】初学编程适合学Python?其有何用?

初学编程适合学Python?其有何用? 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多因素造成了,当然市场需求的重要因素.吴军博士对大数据流行的解释与python流行或许有些默契.数据一直以来都存在,只是在历史条件下,由于计算性能和技术发展的原因,与之匹配的数据处理技术还不是很先进,以至于很多数据被我们舍弃了.同样,python语言简洁流畅等多种优点,也会让第一次接触

初学jsp

编写网页的语言有ASP,PHP,JSP三种,但jsp是其中功能最强大,却也最复杂的语言,小学期在老师的带领下我初步认识了这种语言,虽然对这种语言有了初步的了解,但离精通还离得很远,很多时候都跟不上老师的节奏,第一次接触这门语言确实是一个很痛苦的过程,老师讲的东西也掌握的不是很好,但总算还是小有所获,我知道想掌握这门语言还有很长的一段路要走,在这里就分享一下我的初学心得. SP就是Java,只是它是一个特别的Java语言,加入了一个特殊的引擎,这个引擎将HTTPServlet这个类的一些对象自动进