十八届智能车逆透视教学

首先要讲一下智能车组别的分工

两软一硬,其中一软负责元素方向,另一软负责PID等全局编写。负责全局的为队长,纵观各届智能车,不难发现负责全局的软件同学一般为队长,因为他要负责全局,也就是整支队伍一开始方案的确定、修改,是个指挥,也是最辛苦的人,画pcb有尽头,元素有尽头,算法无尽头,从一开始战斗到最后。

然后讲一下选队友

要选择能坚持到最后的,别有些队伍到最后就一个人在搞,宁愿人员不全,我也不要垃圾,因为我如果觉得谁后期好,可以加人进来,但是一旦有了人就不太好意思踢啦。


 软硬件分明(当然除非你很牛),一开始都不容易,能坚持到最后才行。


 还是坚持,谁会的多,会的少,一点事情没有,找一个能陪你熬夜,陪你一起犯二,一起熬夜熬的点头的那个人,这点非常重要!!!非常,因为一个水队友,不共患难的队友,对你心态会有很大的影响,你在这想死了也调不出来,你在这疯狂逃课调车,他在外面风流倜傥。你在这不吃饭调车,他睡了回笼觉来找你也不知道带份饭,等等等…久而久之,请问你还笑的出来吗?如果你还笑得出来,请问,你经历过绝望吗?应该是没有。

其实最重要的一点还是要选择会珍惜团队成果的人,我辛辛苦苦带着你,你拿着成果到处张扬,自己的车还没能包进国赛,去其他组别帮人家撸代码,这是我最看不惯的人。

以上摘抄于某篇文章,个人非常赞同,所以引用了过来,各位不要对号入座,可能带了点个人情感,毕竟我做车的时候,从来没人帮我撸过代码。

 下面就是正文逆透视变换,其实没有想象的那么难,我是不赞同在车上使用逆透视的,但是毕竟大家都想了解,就教教大家如何逆透视

首先呢,要用上位机采一张车在赛道上的灰度图或者二值化图也行,但是个人觉得还是灰度图比较好,例如下面这张。

十八届智能车逆透视教学_第1张图片

 然后可以使用opencv(python3)求取逆透视矩阵,关于python3与opencv的安装我这边就不在叙述,做为一个做车人我想基本的百度应该还是会的。

下面粘贴opencv求取逆透视矩阵N的代码,

import cv2  # opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt  # Matplotlib是RGB

def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()

#读取图片
image=cv2.imread('6.bmp')   #这里传入所需图片路径
#image=cv2.resize(image,(188,120))
cv_show(image,"image")

width,height = 188,120
pts1 = np.float32([[0,90],[188,90],[75,7],[113,7]])
pts2 = np.float32([[55,120],[133,120],[55,0],[133,0]])

M = cv2.getPerspectiveTransform(pts1, pts2)
print(M)
N = np.linalg.inv(M)
print(N)
warped = cv2.warpPerspective(image, M, (width, height))

cv_show(warped,'warped')
cv2.imwrite('warped.png',warped)

十八届智能车逆透视教学_第2张图片

 运行之后,就会在pycharm(我用的是pycharm开发python的方式)的命令行打印出透视矩阵,pts1中的四个坐标对应你采集的图片上十字的四个角点的坐标,pts2中的坐标对应你想让这四个角点处在图片的哪四个位置。

有了这个透视矩阵,那么逆透视就变得易如反掌了,以下贴出tc264上的逆透视变换代码,

H1-H9对应上面的逆透视矩阵N,我这里tc264和opencv用的图片系列不一样,不要在意。

#define H1 2.045*(10^-1)
#define H2 -1.320*(10^0)
#define H3 7.577*(10^1)
#define H4 0.000*(10^0)
#define H5 1.232*(10^-1)
#define H6 0.000*(10^0)
#define H7 0.000*(10^-18)
#define H8 -1.391*(10^-2)
#define H9 1.000*(10^0)


void Get_Perspective_Image(uint8 imageIn[MT9V03X_H][MT9V03X_W],uint8 imageOut[MT9V03X_H][MT9V03X_W])
{
    uint8 i,j;
    float s,X,Y;
    for(i=0;i=0.5&&X>=0.5&&Y=0)
                {
                    imageOut[i][j]=imageIn[(uint8)(roundf(Y))][(uint8)(roundf(X))];
                }
            }
            else
            {
                imageOut[i][j]=0;
            }
        }
    }
}

透视变换就是如此简单,当然这个运行速度还是需要考虑的,想要加快运行速度可以使用打表的方式,或者只对边线进行逆透视,自行百度咯,我不多叙述,祝各位十八届智能车加油。

你可能感兴趣的:(opencv,人工智能)