学习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 ;
}

<think>嗯,用户想获取学习OpenCV的方法和资源,我需要整理一下现有的资料。根据提供的引用,有三个资源可以参考。首先,引用[1]提到了《学习OpenCV3中文版》的PDF,里面详细介绍了算法集成和机器学习部分,应该适合有一定基础的学习者。然后引用[2]有一个入门教程,涵盖基础知识、图像处理、机器学习应用等,可能更适合新手。引用[3]则是一个超详细的入门教程,还提到OpenCV的应用领域和机器学习模块,这对了解实际应用有帮助。 接下来需要分步骤回答用户的问题。首先推荐系统学习的资源,包括书籍和在线教程。然后建议结合实践项目,比如图像处理和人脸识别,这部分可以引用提供的资源中的例子。接着应该提到官方文档和社区的重要性,比如官方文档和GitHub仓库。最后,学习路径的安排也很重要,从基础到进阶,再到实战项目。 用户可能还需要知道如何开始,是否需要编程基础,所以需要提到Python和C++的基础。另外,结合机器学习模块的话,可能需要一些机器学习的基本知识,但资源里已经提到了相关算法,可以引导用户参考引用中的内容。 还要注意回答的结构是否清晰,是否覆盖了用户的需求。用户可能希望知道有哪些具体的资源,如何获取,以及学习方法。需要确保每个步骤都有对应的资源推荐,并附上引用标记。同时,生成的相关问题要符合用户可能的后续疑问,比如版本差异、实战项目推荐等。</think>### 学习 OpenCV 的教程和资源推荐 #### 一、系统学习资源 1. **经典中文教材** - 《学习OpenCV3中文版》提供完整的PDF教程,重点讲解算法集成与机器学习模块,适合进阶学习者[^1]。 - 内容涵盖核心函数、图像处理、特征检测等,配有代码示例。 2. **入门教程** - 《OpenCV入门教程》从基础知识到机器学习应用逐步展开,每章包含图表和示例代码,适合新手[^2]。 - 重点章节:图像滤波(如高斯滤波$G(x,y)=\frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}}$)、边缘检测(Canny算法)。 3. **综合指南** - 超详细OpenCV入门教程:介绍跨平台特性(Windows/Linux/Android)和实际应用(人脸识别、无人驾驶)[^3]。 #### 二、实践路径 1. **环境搭建** - 安装Python版OpenCV:`pip install opencv-python` - C++版需配置CMake项目(参考官方文档)。 2. **基础项目示例** ```python # 图像灰度化(引用[3]案例扩展) import cv2 img = cv2.imread("test.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow("Result", gray) cv2.waitKey(0) ``` 3. **进阶方向** - 物体跟踪:利用光流法$I(x,y,t)=I(x+\Delta x,y+\Delta y,t+\Delta t)$ - 机器学习模块:调用SVM分类器(引用[3]提到的方法) #### 三、官方文档与社区 1. **核心资源** - 官方文档(含API说明和代码示例):https://docs.opencv.org - GitHub中文资源仓库:https://gitcode.com/open-source-toolkit/3c5a1 2. **学习工具** - 使用Jupyter Notebook实时调试图像处理流程 - 结合Matplotlib可视化处理结果 #### 学习路径建议 1. **第一阶段(1-2周)** - 掌握图像读写、色彩空间转换$RGB \leftrightarrow HSV$ - 实现基础滤镜(如高斯模糊) 2. **第二阶段(2-4周)** - 学习特征检测(SIFT/SURF算法) - 实践人脸检测(Haar级联分类器) 3. **第三阶段(4周+)** - 深入相机标定(张正友算法) - 开发综合项目(如AR应用)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值