智能车制作

标题: 野火大哥请进来看看。关于鹰眼摄像头问题 [打印本页]

作者: 沙冰炒菜    时间: 2013-3-26 09:35
标题: 野火大哥请进来看看。关于鹰眼摄像头问题
我用您的野火库ov7725_get_img()直接能采集到图像,然后我想调用图像数组,如tuxiang[i][j]<yuzhi,以判断黑线白线,但是我资质愚钝,找不到这个数组,请野火大大指教

作者: mxj1005071012    时间: 2013-3-26 09:46

作者: zncsudo    时间: 2013-3-26 10:09
鹰眼输出的已经是二值化图像了
作者: 天秤星座    时间: 2013-3-26 12:03
鹰眼输出是存在一个一维数组内,而且是压缩数据,所以需要你解压的
作者: 野火    时间: 2013-3-26 13:55
看初始化函数,初始化的时候 把数组地址传递下去,采集的时候,就保存在数组里

例如我们的例程:
Ov7725_Init(img_bin_buff);                              //摄像头初始化,图像存储地址为 img_bin_buff

采集到的图像,就放在  img_bin_buff 里
作者: 沙冰炒菜    时间: 2013-3-26 17:57
天秤星座 发表于 2013-3-26 12:03
鹰眼输出是存在一个一维数组内,而且是压缩数据,所以需要你解压的

具体怎么操作呢,大哥,虚心求教。

作者: 沙冰炒菜    时间: 2013-3-26 17:58
野火 发表于 2013-3-26 13:55
看初始化函数,初始化的时候 把数组地址传递下去,采集的时候,就保存在数组里

例如我们的例程:

我看到是个指针函数,不知道怎么操作了。野火大哥,能不能给个范例,,虚心求教。

作者: 沙冰炒菜    时间: 2013-3-26 18:01
zncsudo 发表于 2013-3-26 10:09
鹰眼输出的已经是二值化图像了

二值化图像,那怎么具体提取呢,我找不到数组,就不知道怎么去分辨黑线

作者: 野火    时间: 2013-3-27 00:53
沙冰炒菜 发表于 2013-3-26 17:58
我看到是个指针函数,不知道怎么操作了。野火大哥,能不能给个范例,,虚心求教。

不是指针函数啊!!! 是普通的指针而已……

看初始化函数,初始化的时候 把数组地址传递下去,采集的时候,就保存在数组里

例如我们的例程:
Ov7725_Init(img_bin_buff);                              //摄像头初始化,图像存储地址为 img_bin_buff

采集到的图像,就放在  img_bin_buff 里


你们不需要无线传输的话,可以:
u8 img[H][W];
Ov7725_Init(img);
这样就可以把图像数据写到 img 数组里


作者: 沙冰炒菜    时间: 2013-3-27 15:06
野火 发表于 2013-3-27 00:53
不是指针函数啊!!! 是普通的指针而已……

看初始化函数,初始化的时候 把数组地址传递下去,采集的时 ...

奥,看懂了。谢谢野火大哥耐心指导啊!

作者: 沙冰炒菜    时间: 2013-3-28 20:44
野火 发表于 2013-3-27 00:53
不是指针函数啊!!! 是普通的指针而已……

看初始化函数,初始化的时候 把数组地址传递下去,采集的时 ...

野火大哥,经过你指点之后,经过多次尝试还是失败了。能不能给我一个样例程序,帮我把图像数据提取到二维数组里面。谢谢了啊

作者: 野火    时间: 2013-4-2 21:59
沙冰炒菜 发表于 2013-3-28 20:44
野火大哥,经过你指点之后,经过多次尝试还是失败了。能不能给我一个样例程序,帮我把图像数据提取到二维 ...

u8 img[H][W];
Ov7725_Init((u8 *)img);//这样就可以把图像数据写到 img 数组里


这个就是二维数组啊!!!


作者: darksnipers    时间: 2013-4-2 22:55
天秤星座 发表于 2013-3-26 12:03
鹰眼输出是存在一个一维数组内,而且是压缩数据,所以需要你解压的

对呀对呀  求教 就是这样 如果采集出来 再把他一维的转换成二维数组 还要处理数据 会不会延误下一场采集
作者: darksnipers    时间: 2013-4-2 22:56
野火 发表于 2013-3-26 13:55
看初始化函数,初始化的时候 把数组地址传递下去,采集的时候,就保存在数组里

例如我们的例程:

这是一个一维的呀
作者: 野火    时间: 2013-4-3 07:58
darksnipers 发表于 2013-4-2 22:55
对呀对呀  求教 就是这样 如果采集出来 再把他一维的转换成二维数组 还要处理数据 会不会延误下一场采集

一维和二维,在内存上数据是一样的,只需我们编程的时候告诉编译器如何处理数据就好,所以一维转二维,不消耗一点时间
百度一下 二维数组指针


作者: darksnipers    时间: 2013-4-3 17:12
野火 发表于 2013-4-3 07:58
一维和二维,在内存上数据是一样的,只需我们编程的时候告诉编译器如何处理数据就好,所以一维转二维,不 ...

用火哥您的鹰眼 是8个像素点存一个字节 可是我想存到二维数组 用一个字节存一个像素点 以便在上位机上显示 如果在这样 不需要时间去处理鹰眼上采集来的数据吗
作者: darksnipers    时间: 2013-4-3 17:13
我也碰到这个问题 请问 您解决了吗

作者: 沙冰炒菜    时间: 2013-4-3 17:48
darksnipers 发表于 2013-4-3 17:13
我也碰到这个问题 请问 您解决了吗

我不太会啊,学校上届比赛留下个7620,打算换7620了。

作者: darksnipers    时间: 2013-4-3 18:22
沙冰炒菜 发表于 2013-4-3 17:48
我不太会啊,学校上届比赛留下个7620,打算换7620了。

嗯,好吧,谢谢

作者: darksnipers    时间: 2013-4-3 18:32
野火 发表于 2013-4-2 21:59
u8 img[H][W];
Ov7725_Init((u8 *)img);//这样就可以把图像数据写到 img 数组里

火哥,u8 img[H][W]; Ov7725_Init((u8*)img); 这样就可以用一个字节存一个像素点了吗 求教

作者: 野火    时间: 2013-4-8 09:09
darksnipers 发表于 2013-4-3 17:12
用火哥您的鹰眼 是8个像素点存一个字节 可是我想存到二维数组 用一个字节存一个像素点 以便在上位机上显示 ...

假设 采集回来的图像地址是: img_bin_buff

你想解压到: u8 img_buf[H][W];  这个 二维数组里。(当然也可以是一维数组: u8 img_buf[H*W];  )
则需要调用这个函数:
img_extract(img_buf,(u8 *) img_bin_buff, H*W/8);          //解压为灰度图像,方便发送到上位机显

img_extract 函数的具体代码如下:

//压缩二值化图像解压(空间 换 时间 解压)
//srclen 是二值化图像的占用空间大小
void img_extract(u8 *dst, u8 *src, u32 srclen)
{
    u8 colour[2] = {255, 0};  //0 和 1 分别对应的颜色
    //注:野火的摄像头 0 表示 白色,1表示 黑色
    u8 tmpsrc;
    while(srclen --)
    {
        tmpsrc = *src++;
        *dst++ = colour[ (tmpsrc >> 7 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 6 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 5 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 4 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 3 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 2 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 1 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 0 ) & 0x01 ];
    }
}


作者: darksnipers    时间: 2013-4-8 23:08
野火 发表于 2013-4-8 09:09
假设 采集回来的图像地址是: img_bin_buff

你想解压到: u8 img_buf[H][W];  这个 二维数组里。(当然 ...

谢谢火哥
作者: darksnipers    时间: 2013-4-8 23:36
野火 发表于 2013-4-8 09:09
假设 采集回来的图像地址是: img_bin_buff

你想解压到: u8 img_buf[H][W];  这个 二维数组里。(当然 ...

火哥 采集完一幅图像 用您的代码解压 会不会影响下一副图像采集

作者: 野火    时间: 2013-4-9 10:03
darksnipers 发表于 2013-4-8 23:36
火哥 采集完一幅图像 用您的代码解压 会不会影响下一副图像采集

不会,解压的目的数组与采集的数组位置是不相同的……

作者: darksnipers    时间: 2013-4-9 23:09
野火 发表于 2013-4-9 10:03
不会,解压的目的数组与采集的数组位置是不相同的……

火哥 用您提供的代码50帧稳定版  改了引脚 PCLK用PTC8   VSYN用PTB3   HREF用PTD0  SCL用PTC10  SDA用PTC11
数据口用了 PTB16~23  能够成功完成摄像头初始化 调试信息也能输出 可以进入场中断  进入场中断后 img_flag 被赋值IMG_GATHER后 就一直 ov7725_get_img()函数里面 反复执行while(img_flag!=IMG_FINISH) {   if(img_flag==IMG_FALL).....} 一直循环判断img_flag!=IMG_FINISH  img_flag==IMG_FALL 加了观察点  img_flag始终是IMG_GATHER,一直不变 不进入DMA中断 请问这是怎么回事呀  


补充内容 (2013-4-9 23:23):
DMA 用的是通道0
作者: 野火    时间: 2013-4-10 20:23
darksnipers 发表于 2013-4-9 23:09
火哥 用您提供的代码50帧稳定版  改了引脚 PCLK用PTC8   VSYN用PTB3   HREF用PTD0  SCL用PTC10  SDA用PTC ...

DMA没触发到,看看 PCLK 配置,是否有漏了


作者: 野火    时间: 2013-4-10 20:24
darksnipers 发表于 2013-4-9 23:09
火哥 用您提供的代码50帧稳定版  改了引脚 PCLK用PTC8   VSYN用PTB3   HREF用PTD0  SCL用PTC10  SDA用PTC ...

你上传代码来,我看看

作者: darksnipers    时间: 2013-4-10 20:39
野火 发表于 2013-4-10 20:24
你上传代码来,我看看

谢谢火哥
作者: darksnipers    时间: 2013-4-10 20:42
darksnipers 发表于 2013-4-10 20:39
谢谢火哥

火哥 这是代码 Y0~Y7 用的是PTB16~23   VSYN用的PTB3 PCLK用的是PTC8  HREF用的是PTD0  SDA用的是PTC11 SCL用的是PTC10
作者: 野火    时间: 2013-4-11 13:27
darksnipers 发表于 2013-4-10 20:42
火哥 这是代码 Y0~Y7 用的是PTB16~23   VSYN用的PTB3 PCLK用的是PTC8  HREF用的是PTD0  SDA用的是PTC11 S ...

你好,我验证过,你的代码可用的,请检查硬件连接

从野火鹰眼摄像头正面看,摄像头管脚如下:
1         2         3       4             5             6          7        8          9          10  
VCC     X       X        PCLK       X          VSYN          X       X        HREF      GND
Y0       Y1      Y2      Y3          Y4          Y5         Y6       Y7      SCL        SDA




作者: darksnipers    时间: 2013-4-11 17:28
野火 发表于 2013-4-11 13:27
你好,我验证过,你的代码可用的,请检查硬件连接

从野火鹰眼摄像头正面看,摄像头管脚如下:

火哥 你的X的那些引脚 是接高电平还是接地

作者: 野火    时间: 2013-4-11 21:41
darksnipers 发表于 2013-4-11 17:28
火哥 你的X的那些引脚 是接高电平还是接地

悬空即可,X 表示没用到


作者: darksnipers    时间: 2013-4-11 23:46
野火 发表于 2013-4-11 21:41
悬空即可,X 表示没用到

谢谢火哥 程序能用了 火哥 使用您的UART的程序发现一个现象不太理解 我需要使用上位机看图像 那个上位机软件要求有一个协议 先发送 0 255  我用您的代码uart_putchar(UARTn uartn, char ch) 这个函数 把函数里面ch的类型改成了unsigned char 然后调用这个函数uart_putchar(UART1,0) uart_putchar(UART1,255) 在串口调试助手上 能看到接受的字节数 和发送的字节数也相等  但是看不到0 255  这是怎么回事呀

作者: 野火    时间: 2013-4-12 17:30
darksnipers 发表于 2013-4-11 23:46
谢谢火哥 程序能用了 火哥 使用您的UART的程序发现一个现象不太理解 我需要使用上位机看图像 那个上位机软 ...

串口助手里,设置 16进制显示


作者: darksnipers    时间: 2013-4-13 00:15
野火 发表于 2013-4-12 17:30
串口助手里,设置 16进制显示

火哥 用串口看了一下  采集回来的数据都是FF 这是怎么回事呀
作者: darksnipers    时间: 2013-4-13 18:49
野火 发表于 2013-4-12 17:30
串口助手里,设置 16进制显示

火哥 采集图像 img_bin_buff里面都是0呀 这是怎么回事 可以进 DMA中断了 解压之后都是FF  您提供的UART里面 DMA传输GPIO实验数据 那个实验 我提前赋给数组BUFF 值  执行完程序之后 没有看到BUFF数组的改变 火哥 我的采集图像的程序对不对呀  都快哭了
作者: 野火    时间: 2013-4-16 10:17
darksnipers 发表于 2013-4-13 18:49
火哥 采集图像 img_bin_buff里面都是0呀 这是怎么回事 可以进 DMA中断了 解压之后都是FF  您提供的UART里 ...

DMA例程,是有操作步骤的哦,你有没有按照操作步骤做?

另外,摄像头采集代码,是需要摄像头按我们设定的管脚来连接到核心板上的哦


作者: darksnipers    时间: 2013-4-18 12:24
野火 发表于 2013-4-16 10:17
DMA例程,是有操作步骤的哦,你有没有按照操作步骤做?

另外,摄像头采集代码,是需要摄像头按我们设定 ...

嗯 火哥 谢谢您 弄好了
作者: darksnipers    时间: 2013-4-18 12:38
野火 发表于 2013-4-16 10:17
DMA例程,是有操作步骤的哦,你有没有按照操作步骤做?

另外,摄像头采集代码,是需要摄像头按我们设定 ...

火哥 用的您的50帧稳定版的代码 现在想改成150帧每秒 请问 怎么修改SCCB呀 改成什么呀?150帧每秒,摄像头有必要超频吗
作者: 野火    时间: 2013-4-18 13:33
darksnipers 发表于 2013-4-18 12:38
火哥 用的您的50帧稳定版的代码 现在想改成150帧每秒 请问 怎么修改SCCB呀 改成什么呀?150帧每秒,摄像头 ...

150帧 的 ,需要的硬件电路要求比较高,你们自己做的板子,难以试下长排线

如果用 150帧,难以用 一帧 的时间来处理图像,所以超频那么高,没多大用处。
一帧的时间,比 你一个周期处理的时间长 一点,那就比较好


作者: darksnipers    时间: 2013-4-20 18:45
野火 发表于 2013-4-18 13:33
150帧 的 ,需要的硬件电路要求比较高,你们自己做的板子,难以试下长排线

如果用 150帧,难以用 一帧 ...

火哥 野火鹰眼有配套的广角镜头吗  鹰眼能不能换广角镜头  换了怎么调焦距呀  拍直跑道时 两条线从矩形两边就出去了
下面几行没有黑线了 这是怎么回事呀 鹰眼架多高?

作者: 野火    时间: 2013-4-22 09:10
darksnipers 发表于 2013-4-20 18:45
火哥 野火鹰眼有配套的广角镜头吗  鹰眼能不能换广角镜头  换了怎么调焦距呀  拍直跑道时 两条线从矩形两 ...

没配套的广角镜头,你直接淘宝,很容易找到。我们的镜头是淘宝很通用的那种

调焦距,直接旋转镜头即可。


作者: darksnipers    时间: 2013-4-22 22:16
野火 发表于 2013-4-22 09:10
没配套的广角镜头,你直接淘宝,很容易找到。我们的镜头是淘宝很通用的那种

调焦距,直接旋转镜头即可 ...

可是怎么知道调焦调到好不好呀 都是黑白线
作者: 野火    时间: 2013-4-23 08:43
darksnipers 发表于 2013-4-22 22:16
可是怎么知道调焦调到好不好呀 都是黑白线

野火鹰眼拍摄的前方 一张 白底黑字 的 纸张,里面写着一个 比较大的字体。

旋转镜头,使得拍摄的字体最清晰 即可。



作者: darksnipers    时间: 2013-4-23 19:00
野火 发表于 2013-4-23 08:43
野火鹰眼拍摄的前方 一张 白底黑字 的 纸张,里面写着一个 比较大的字体。

旋转镜头,使得拍摄的字体最 ...

谢谢火哥

作者: darksnipers    时间: 2013-4-24 23:18
darksnipers 发表于 2013-4-23 19:00
谢谢火哥

火哥 用您的50帧的稳定版代码 是不是我的图像处理 必须在0.02秒之内必须完成呢

作者: 野火    时间: 2013-4-25 11:01
darksnipers 发表于 2013-4-24 23:18
火哥 用您的50帧的稳定版代码 是不是我的图像处理 必须在0.02秒之内必须完成呢

嗯,20ms 内处理完,这样效率才比较高,即 一帧时间采集,再用一帧时间处理。
如果 20ms 内还处理不完,那要继续降 摄像头速度,不过 一般20ms 内处理完,应该没压力的啊


作者: darksnipers    时间: 2013-4-25 23:15
野火 发表于 2013-4-25 11:01
嗯,20ms 内处理完,这样效率才比较高,即 一帧时间采集,再用一帧时间处理。
如果 20ms 内还处理不完, ...

谢谢火哥

作者: 鹰之梦    时间: 2013-5-16 16:19
野火 发表于 2013-4-8 09:09
假设 采集回来的图像地址是: img_bin_buff

你想解压到: u8 img_buf[H][W];  这个 二维数组里。(当然 ...

火哥,我还是不太了解把一次采集的八个像素点分开后怎样存储在二维数组里调用,试了很多方法还是不行,还希望火哥能帮忙讲解一下

作者: ws15101    时间: 2016-3-23 21:54
野火 发表于 2013-4-2 21:59
u8 img[H][W];
Ov7725_Init((u8 *)img);//这样就可以把图像数据写到 img 数组里

火哥,鹰眼可以用电视机看吗





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2