写在前面没用的话~
只是单存的想写专栏,刚刚申请的专栏名字叫“图像处理” 不知道能不能过。 开了专栏不知道能写多少,我是这样想的,一来写点东西在里面方便自己以后用的时候去找,再来,其他人看到了可以拿去用。其实想在github上建立一个代码库的。但是 github 代码更新来更新去的太麻烦,而且建个C++工程文件貌似好奇怪,好吧!我是一个不会用 gcc 的工程师。 开这篇专栏的目的是因为,在学生时代处理图像的万能工具 OpenCV 在公司竟然不能商用了,因为 OpenCV的开源协议是个人或是科研,我这个重度依赖别人代码 API 的工程师要疯了。昨天也就是周五晚上,组长要我下周一交一个不能用 OpenCV 的图像处理代码,我瞬间蒙掉了,然后组长给我一个微笑,加班吧少年,然后扔给了我一个文件夹,还好这个文件夹救了我。我在今天晚上完成了任务,emmm 其实是拖拖拉拉 15 点才开始写直到 18:50,code 并且测试完,然后坐到 19 点打卡走人。So,我决定记下来一些东西,这些以后我肯定还会用得到的东西,方便自己用的时候上来找一找,而不是在翻一堆代码。
—— 2019.07.06 毕业后的第一个周末 FIXME:好心情 XXX:赶项目一时爽 一直赶时时爽 @TODO:加班
工作了几个月了转嵌入式了~
关于一些约定
- 代码使用的是 C/C++,代码的函数使用的 C/C++ 标准库执行的图像算法,脱离于开源库如 OpenCV
- 函数使用驼峰命名方式,变量使用 '_' 连接的命名方式,每个变量名字前面尽量带上类型,以方便知道变量代表什么
- 函数形参,一般情况下函数的 return 返回的是状态码,比如这个函数是否处理成功,或是根据函数功能返回的信息,一般不返回计算的值或是其他变量;函数前面的形参传入的是函数处理需要的东西,计算的值和处理得到的东西使用 ‘&’ 得到。
基本代码
- 图像显示
showImage()
这里借助 OpenCV,我也不会其他方法,没了 python 感觉自己就是个白痴。
void
- 图像变量转化
cvMat to unsigned char*
图像是由若干通道的像素矩阵堆成,像素的取值范围为 0~255 整型数值,这样,我们可以将每个像素表示成无符号字符 unsigned char,所以一副图像,我们将其表示成一个无符号数组,为了方便使用,我们使用 OpenCV 转成 unsigned char*,注意这里使用 OpenCV 读取图像,和上一节使用 OpenCV 显示图像,除这两个使用到 OpenCV 之外,算法内不会包含 OpenCV,如有包含纯属巧合。
cv
unsigned char* to cvMat
在使用 unsigned char* 处理图像的时候,并不能肉眼看见图像的处理效果,所以还需要把无符号字符数组还原回图像,方便查看。当然,因为当前图像储存在数组里面,若干函数中必须传入图像的宽度、高度和通道数。
void
- 图像通道转化
BGRPacked2RGBPacked()
每种读取图像的方式不一致,比如 OpenCV 读取图像的通道排序为 BGR,python中的 matplotlib 读取的顺序为 RGB,或是在深度学习中输入图像的通道顺序都不一致,因此需要转换通道格式。
// @param:
- 图像灰度化
BGR2GRAY()
灰度化这个东西很常用,几乎大部分的图像处理操作都是在灰度图像上完成的, OpenCV给出了所有格式互转的接口,这里我们给出最常用的转灰度图方法,BGR 通道图像转灰度图
// @param:[
- 图像转二进制格式
RGB2BIN
string
GRAY2BIN
string
- 二进制格式转图像
BIN2RGB
string
BIN2GRAY
string
- 改变图像大小
resize()
int