其实很久之前就有做过图像处理的项目,是做关于无人机的目标跟踪的项目,不过那会也是刚接触图像处理,写起代码就是网上翻几篇目标识别的论文,照着别人网上发的论文给出的目标识别的步骤框架,去找opencv对应的封装好的函数,一般就这些步骤
1.转灰度
2.直方图均衡
3.滤波
4.特征提取(边缘检测,颜色检测就不转灰度了)
项目做下来代码倒是跑通了,但是遇到问题自己还是一头雾水的,直到后面静下心来找了图像处理的课程认真学习了一下,总算是茅塞顿开。
做图像处理的时候其实也是逐帧的处理,而每一帧就是一张图片,每张图片是由一个个像素点组成的,在计算机中图像存储实质上众多像素点组成的矩阵,这就是opencv中的Mat类的用途,图像处理的技术根本上来说就是数学运算,限制条件来改变矩阵中数据,比如转灰度,一个彩色像素点是有红绿黄三个通道值转为灰度最简单的方法当然就是平均法,将同一个像素位置3个通道RGB的值进行平均,I(x,y) = 1/3 * I_R(x,y) +1/3 * I_G(x,y)+ 1/3 * I_B(x,y),再套一个循环,把图像中每个点都处理一下就完成了。
其实opencv里封装好的函数干得也是这样的工作。
最近有接触两个有关图像处理的项目真正让我喜欢上了图像处理这个方向,确实熬劲脑力,但也学到了很多,给了我新的启发
图像处理真的是算法的考验,特别灵活,当自己设置阈值逐个像素点去筛选修改完成想要实现的任务那种感觉太美妙了,opencv当然给了很大的便捷,但是想做写出自己清晰的代码,一定要了解原理,一个函数到底是干了什么事,它是怎么实现的,在opencv没有实现这个功能的函数的时候我应该使用什么样的步骤才能实现我要的效果,一定要有自己的想法。
感谢生活在互联网时代,可以很轻松查阅学习知识
学无止境共勉之