学习OpenCV(四)

/*
*功能:图像叠加操作
*
*/
#include "highgui.h"

int main()
{
	cv::Mat image1 , image2 ;
	cv::Mat result ;
	image1 = cv::imread("D:/Development/OpenCV/images/boldt.jpg") ;
	image2 = cv::imread("D:/Development/OpenCV/images/rain.jpg") ;

//图像叠加的几种方法
	cv::addWeighted(image1 , 0.9 , image2 , 0.7 , 0. , result) ;
	//cv::add(image1 , image2 , result) ;
	//cv::add(image1 , cv::Scalar(2) , result) ;
	//cv::scaleAdd(image1 , 0.9 , image2 , result) ;

	// if (mask[i]) c[i]= a[i]+b[i];
	//cv::add(image1 , image2 , result , mask );

//可以使用操作符重载
	//result = 0.9 * image1 + 0.7 * image2 ;

//还有其他的加减乘除,位运算,数学运算可以使用
	//cv::subtract(image1 , image2 , result) ; 

	//result.inv() ;
	//result.t() ;

	cv::namedWindow("Result") ;
	cv::imshow("Result" , result) ;

	cv::waitKey() ;
	return 0 ;
}



/*
*功能:按颜色平面分解图像,整合图像
*/
#include "highgui.h"

int main()
{
	cv::Mat image1 , image2 ;
	cv::Mat result ;
	image1 = cv::imread("D:/Development/OpenCV/images/boldt.jpg") ;
	image2 = cv::imread("D:/Development/OpenCV/images/rain.jpg" , 0) ;

	std::vector<cv::Mat> planes ;

	cv::split(image1 , planes) ;
	planes[0] += image2 ;
	cv::merge(planes , result) ;

	cv::namedWindow("Result") ;
	cv::imshow("Result" , result) ;

	cv::waitKey() ;
	return 0 ;
}


/*
*功能:定义图像的ROI区域
*
*/
#include "highgui.h"

int main()
{
	cv::Mat image1 , logo ;
	cv::Mat result ;
	image1 = cv::imread("D:/Development/OpenCV/images/boldt.jpg") ;
	logo   = cv::imread("D:/Development/OpenCV/images/logo.bmp") ;

	//定义ROI的几种方法
	//cv::Mat ROI = image1(cv::Rect(385 , 270 , logo.cols , logo.rows)) ;
	cv::Mat ROI = image1( cv::Range(270 , 270 + logo.rows) , 
		                  cv::Range(385 , 385 + logo.cols)) ;

	//在ROI区域添加图像的几种方法
	//cv::addWeighted(ROI , 1.0 , logo , 0.3 , 0. , ROI) ;
	cv::Mat mask = cv::imread("D:/Development/OpenCV/images/logo.bmp" , 0) ;
	logo.copyTo(ROI , mask) ;//仅当此处为1时才拷贝

	cv::namedWindow("Result") ;
	cv::imshow("Result" , image1) ;

	//得到一个图像的几行或几列
	cv::Mat rowCols ;
	//rowCols = image1.rowRange(0 , 100) ;
	rowCols = image1.colRange(0 , 100) ;
	cv::namedWindow("rowCols") ;
	cv::imshow("rowCols" , rowCols) ;

	cv::waitKey() ;
	return 0 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值