本学期公选了数字图像处理,并在后来成为了19届摩托组的处理图像的队员。根据我的学习流程总结过程中的问题和心得
一、VS22 opencv使用心得
1.vs2022 opencv环境配置以及image watch插件下载
opencv环境配置推荐B站视频BV1z14y1B71C讲得很清楚
image watch直接在扩展——管理扩展中直接下载,下载后重启就可以使用
2.imread,cvtColor,clone函数的使用
imread的文件名传入如果不在工程内输入完整地址需要把黏贴的文件地址的反斜杠改为斜杠,接收数据的变量要用cv库的Mat声明矩阵;如:cv::Mat img(120, 188, CV_8UC1);或Mat image(120, 188, CV_8UC1);另外CV_8UC1的含义是每个元素是8个比特单通道,其他大小可以到定义中查看。
cvtColor函数能实现图像的色彩通道的转换(enum 中间的2就是TO的意思)
image = img.clone();能实现复制图像而地址不同,另外有一个函数,复制后地址相同,处理的是同一个矩阵的元素。
二、VS处理图像
1.补线
我采用的方案是迷宫法,最初在VS上做处理比较理想,所以不限高也不限边。考虑到这一点我们必须要补齐左右上三边的边线。这里必须要介绍一下从摄像头上传回的图像,这个图像是一个灰度图像但它的右边界是一条值为0的黑边。如果不补线除了搜到边界时直接因为缺少元素报错的问题,还会因为右侧黑边而沿着黑边一直向前。
解决方案就是取了各边线的平均值再乘以一个小数,防止遇到大赛道面补线的值偏大,右边界则取前一列。
2.巡线
因为在一些特殊情况下,巡线会出现各种状况。认真分析了巡线的规律后,我改变了巡线中阈值计算的权重。
3.角点
我采用的是角度计算变化率后用非极大值抑制,除此之外我还滤除的突变噪声角点。
因为代码都是我亲自观察总结后写的,也从他人的思路汲取灵感,所以我就也不展示代码,只讲问题和思路。
三、AURIX开发中的问题
1.AURIX的安装
可以到GITEE上下个逐飞开源库,在文件夹ADS使用教程中使用说明书中找到逐飞的网盘下载AURIX文件,都运行一下就可以了。之前在官网下的可能少些东西,运行时一个是可能一直FLASHING FAILED 报错信息是问你是否真的有ADS还是DRIVER,另外一个就是改一回代码就要重新REBUILD否则DEBUG文件中会报错,报错信息显示%target。
2.中线的寻找
一开始是用拉普拉斯算子找,最后还是选择二分法作大津法阈值两边扫了
3.舵机角度偏差
我的设想是赛道两边同一行作一个变化的点切线向上延长交点与图像最下中点作角度计算,但实际结果仍然无法很好的解决弯道问题,目前认为原因还是无法区分有效信息,如果之后能区分赛道有效信息就可以直接通过单边不做逆透视巡线。
4.IPS屏幕显示
IPS屏幕的显示相当占用时间,所以与图像处理分用不同核处理,并在车跑时关闭。另外ASERT ERRO 513是超出屏幕的报错。具体使用方法根据逐飞例程即可。串口初始化为并口。
5.DEBUG串口的使用
初始化debug默认串口(在debug.h中)之后,就可以使用该串口进行DEBUG了。
目前主要还是数据输入上位机进行查看,比如printf某个变量或者利用串口助手进行图传,图传的项目中最好没有其他程序。也可使用例程进行图传,默认波特率115200。
四、代码书写
1、对于PID参数可以采取宏定义并定义在源文件中,防止在头文件中与其他同名参数冲突。也可以选择更具体的名称去定义在头文件中
本文分享了作者在学习和应用数字图像处理过程中,使用VS2022和OpenCV的实践经验,包括环境配置、函数使用技巧,以及在AURIX开发中的问题解决,如图像补线、巡线算法优化、PID参数管理和IPS屏幕显示调整等。
3万+

被折叠的 条评论
为什么被折叠?



