码迷,mamicode.com
首页 > 其他好文 > 详细

Open CV初学(一)

时间:2015-09-24 22:36:39      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

一、图片的读入与写出

(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;  
}  

运行结果图:

 技术分享

 

Open CV初学(一)

标签:

原文地址:http://www.cnblogs.com/tyen0921/p/4836571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!