注册 登录
查看: 628|回复: 30

[摄像头组] 关于图像解压的问题,如何查看解压后的数组?山外哥,求救!!!

[复制链接]
发表于 2014-5-6 20:29:07 | 显示全部楼层 |阅读模式
第一个问题,我这样解压,不知对不对:
  1. uint8 img[CAMERA_W][CAMERA_H];                 //定义解压后的图像数组
  2. img_extract((uint8*)img, imgbuff, CAMERA_SIZE);          //解压为灰度图像,方便发送到上位机显

  3. //压缩二值化图像解压(空间 换 时间 解压)
  4. //srclen 是二值化图像的占用空间大小
  5. void img_extract(uint8 *dst, uint8 *src, uint32 srclen)
  6. {
  7.     uint8 colour[2] = {255, 0}; //0 和 1 分别对应的颜色
  8.     //注:山外的摄像头 0 表示 白色,1表示 黑色
  9.     uint8 tmpsrc;
  10.     while(srclen --)
  11.     {
  12.         tmpsrc = *src++;
  13.         *dst++ = colour[ (tmpsrc >> 7 ) & 0x01 ];
  14.         *dst++ = colour[ (tmpsrc >> 6 ) & 0x01 ];
  15.         *dst++ = colour[ (tmpsrc >> 5 ) & 0x01 ];
  16.         *dst++ = colour[ (tmpsrc >> 4 ) & 0x01 ];
  17.         *dst++ = colour[ (tmpsrc >> 3 ) & 0x01 ];
  18.         *dst++ = colour[ (tmpsrc >> 2 ) & 0x01 ];
  19.         *dst++ = colour[ (tmpsrc >> 1 ) & 0x01 ];
  20.         *dst++ = colour[ (tmpsrc >> 0 ) & 0x01 ];
  21.     }
  22. }
第二个问题,怎样做才能查看解压后的数组中的数值?我想看看我解压得对不对
回复

使用道具 举报

发表于 2014-5-6 20:48:30 | 显示全部楼层
要想看数值的话可以把上面uint8的类型改为uint32类型,因为uint8为无符号数组,即使你在线看,显示的也只是‘\0’之类的东西。建议不看数值,直接看图形对不对就行了,如果真要看,那就把那个数组近一步处理一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 20:53:45 | 显示全部楼层
925901184 发表于 2014-5-6 20:48
要想看数值的话可以把上面uint8的类型改为uint32类型,因为uint8为无符号数组,即使你在线看,显示的也只是 ...

那图形在哪可以看到呢?求指点
回复 支持 反对

使用道具 举报

发表于 2014-5-6 20:55:16 | 显示全部楼层
山外哥的上位机。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 21:45:22 | 显示全部楼层
925901184 发表于 2014-5-6 20:55
山外哥的上位机。。。。。。

大哥,你的上位机可以显示图像吗?怎么我的没有反应啊???我是照着山外的视频操作的。莫非我用的蓝牙不对????
回复 支持 反对

使用道具 举报

发表于 2014-5-6 21:48:47 | 显示全部楼层
草原上的星星 发表于 2014-5-6 21:45
大哥,你的上位机可以显示图像吗?怎么我的没有反应啊???我是照着山外的视频操作的。莫非我用的蓝牙不 ...

山外哥的上位机图标如图,我没看过山外的视频。至于不显示图像,原因很多,比如蓝牙没有配置好,波特率没有一致,串口的配置,接线是否正确,上位机的协议,传输图像的格式。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-5-6 21:50:29 | 显示全部楼层
925901184 发表于 2014-5-6 20:55
山外哥的上位机。。。。。。

上位机图标

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 21:52:51 | 显示全部楼层
925901184 发表于 2014-5-6 21:48
山外哥的上位机图标如图,我没看过山外的视频。至于不显示图像,原因很多,比如蓝牙没有配置好,波特率没有 ...

首先,蓝牙没问题,因为我曾用蓝牙做过编码器计数的实验,都很正常;至于波特率,这个就不知道了,我用的是山外的例程,既然山外视频中演示可以成功,那波特率自然也是没有问题的,上位机协议自然也是有的
回复 支持 反对

使用道具 举报

发表于 2014-5-6 21:56:21 | 显示全部楼层
草原上的星星 发表于 2014-5-6 21:52
首先,蓝牙没问题,因为我曾用蓝牙做过编码器计数的实验,都很正常;至于波特率,这个就不知道了,我用的 ...

你看能不能帮上你

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-5-6 21:59:18 | 显示全部楼层
想知道解压对不对,只能上位机或者液晶看效果,看看图像对不对。
不然单纯看数组,都不知道是什么值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 22:00:58 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-6 21:59
想知道解压对不对,只能上位机或者液晶看效果,看看图像对不对。
不然单纯看数组,都不知道是什么值

液晶屏怎么看效果,貌似解压前后液晶屏没有什么区别啊
回复 支持 反对

使用道具 举报

发表于 2014-5-6 22:02:23 | 显示全部楼层
草原上的星星 发表于 2014-5-6 22:00
液晶屏怎么看效果,貌似解压前后液晶屏没有什么区别啊

我们提供直接看二值化图像的液晶函数,和看灰度的液晶函数。
两次显示,看看有没有区别,没区别就是解压正确了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 22:17:31 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-6 22:02
我们提供直接看二值化图像的液晶函数,和看灰度的液晶函数。
两次显示,看看有没有区别,没区别就是解压 ...

这个好像不对,因为一直用的都是黑白图像啊,不用解压也可以显示的。刚刚照你说的试着切换到灰度图像,结果发现一个怪异的事:
液晶屏只有最上一行显示,其余都是黑的,而且更奇怪的是最上一行是由88幅小图像组成的,因为我发现我挥手时,那8幅图像一模一样
回复 支持 反对

使用道具 举报

发表于 2014-5-6 22:22:41 | 显示全部楼层
草原上的星星 发表于 2014-5-6 22:17
这个好像不对,因为一直用的都是黑白图像啊,不用解压也可以显示的。刚刚照你说的试着切换到灰度图像,结 ...

灰度函数,你怎么调用的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 22:24:28 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-6 22:22
灰度函数,你怎么调用的?

是不是下面这个:
  1. #if     ( CAMERA_COLOR == 1 )                                       //灰度摄像头
  2.         LCD_Img_gray_Z       (site,size, imgbuff,imgsize);
  3. #elif   ( CAMERA_COLOR == 0 )                                       //黑白摄像头
  4.         LCD_Img_Binary_Z(site,size, imgbuff,imgsize);
  5. #endif


  6. #define CAMERA_COLOR        0               //摄像头输出颜色 , 0 为 黑白二值化图像 ,1 为 灰度 图像 ,2 为 RGB565 图像
回复 支持 反对

使用道具 举报

发表于 2014-5-6 22:25:39 | 显示全部楼层
草原上的星星 发表于 2014-5-6 22:24
是不是下面这个:

图像数据的那个数组需要换成 解压后的目标缓冲区数组
回复 支持 反对

使用道具 举报

发表于 2014-5-6 22:27:38 | 显示全部楼层
山外QQ群多少?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 22:37:27 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-6 22:25
图像数据的那个数组需要换成 解压后的目标缓冲区数组

我换成这样:
  1. #if     ( CAMERA_COLOR == 1 )                                       //灰度摄像头
  2.         LCD_Img_gray_Z       (site,size, (uint8*)img,imgsize);
  3. #elif   ( CAMERA_COLOR == 0 )                                       //黑白摄像头
  4.         LCD_Img_Binary_Z(site,size, (uint8*)img,imgsize);
  5. #endif


  6. uint8 img[CAMERA_W][CAMERA_H];                 //定义解压后的图像数组

  7. img_extract((uint8*)img, imgbuff, CAMERA_SIZE);          //解压为灰度图像,方便发送到上位机显
发现两个结果果然不一样。灰度图像显示很好,就是黑白图像显示不行,很乱。这是什么原因呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 22:38:11 | 显示全部楼层
bjyy 发表于 2014-5-6 22:27
山外QQ群多少?

同求!!我也没在群里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 22:40:49 | 显示全部楼层
925901184 发表于 2014-5-6 21:56
你看能不能帮上你

我用的是PTC14和PTC15,UART4,当时修改过了,虚拟示波器显示没问题的。
弱弱地问一句,你上面的截图在哪个文件,现在突然找不着了
回复 支持 反对

使用道具 举报

发表于 2014-5-6 22:43:33 | 显示全部楼层
草原上的星星 发表于 2014-5-6 22:40
我用的是PTC14和PTC15,UART4,当时修改过了,虚拟示波器显示没问题的。
弱弱地问一句,你上面的截图在哪 ...

管脚复用在工程根目录下\Board\inc\FIRE_PORT_cfg.h  
工程的常用配置在工程根目录下\Board\inc\ FIRE_MK60_conf.h  (printf函数和超频,延时等相关函数配置)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 22:55:21 | 显示全部楼层
康锦 发表于 2014-5-6 22:43
管脚复用在工程根目录下\Board\inc\FIRE_PORT_cfg.h  
工程的常用配置在工程根目录下\Board\inc\ FIRE_M ...

嗯,看到了,非常感谢
回复 支持 反对

使用道具 举报

发表于 2014-5-6 22:55:56 | 显示全部楼层
草原上的星星 发表于 2014-5-6 22:37
我换成这样:发现两个结果果然不一样。灰度图像显示很好,就是黑白图像显示不行,很乱。这是什么原因呢?

问一下啊,这个灰度和黑白调用是在camera_get_img()下面那个,还是在无线发送和接收数据里面那个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-7 07:19:54 | 显示全部楼层
925901184 发表于 2014-5-6 21:56
你看能不能帮上你

我改了还是不行,不知道为什么

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-7 07:21:59 | 显示全部楼层
咳咳咳咳 发表于 2014-5-6 22:55
问一下啊,这个灰度和黑白调用是在camera_get_img()下面那个,还是在无线发送和接收数据里面那个

在【LCD_摄像头】例程中是在camera_get_img()下面的那个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-7 07:49:47 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-6 22:02
我们提供直接看二值化图像的液晶函数,和看灰度的液晶函数。
两次显示,看看有没有区别,没区别就是解压 ...

奇怪了,使用解压后的数组,灰度显示是正常的,可是黑白显示不正常(手全盖住摄像头的话屏幕是全白的,而灰度则是全黑的;手少离远点,对黑白显示来说,液晶屏是全黑的。如果用白纸盖住摄像头的话,黑白的是全黑的,灰度的是全白的)。这个是什么原因?是不是我解压得不对?
代码如下:
  1. uint8 img[CAMERA_W][CAMERA_H];                 //定义解压后的图像数组

  2. img_extract((uint8*)img, (uint8*)imgbuff, CAMERA_SIZE);          //解压为灰度图像,方便发送到上位机显
  3. #if     ( CAMERA_COLOR == 1 )                                       //灰度摄像头
  4.         LCD_Img_gray_Z       (site,size, (uint8*)img,imgsize);
  5. #elif   ( CAMERA_COLOR == 0 )                                       //黑白摄像头
  6.         LCD_Img_Binary_Z(site,size, (uint8*)img,imgsize);
  7. #endif
回复 支持 反对

使用道具 举报

发表于 2014-5-7 12:33:28 | 显示全部楼层
草原上的星星 发表于 2014-5-7 07:49
奇怪了,使用解压后的数组,灰度显示是正常的,可是黑白显示不正常(手全盖住摄像头的话屏幕是全白的,而 ...

改了改都是黑白图像,改不成灰度的啊,你在哪改的,我在7725.h里面也改了,没效果
回复 支持 反对

使用道具 举报

发表于 2014-5-7 12:34:44 | 显示全部楼层
咳咳咳咳 发表于 2014-5-7 12:33
改了改都是黑白图像,改不成灰度的啊,你在哪改的,我在7725.h里面也改了,没效果

不是改成灰度,而是改成用灰度函数显示。

图像出来就已经黑白了,不可能真的变回灰度的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-7 12:35:37 | 显示全部楼层
咳咳咳咳 发表于 2014-5-7 12:33
改了改都是黑白图像,改不成灰度的啊,你在哪改的,我在7725.h里面也改了,没效果
  1. //配置摄像头的特性
  2. #define CAMERA_USE_HREF     0               //是否使用 行中断 (0 为 不使用,1为使用)
  3. #define CAMERA_COLOR        1               //摄像头输出颜色 , 0 为 黑白二值化图像 ,1 为 灰度 图像 ,2 为 RGB565 图像
  4. #define CAMERA_POWER        0               //摄像头 电源选择, 0 为 3.3V ,1 为 5V

  5.         img_extract(img, imgbuff, CAMERA_SIZE);          //解压为灰度图像,方便发送到上位机显
  6. #if     ( CAMERA_COLOR == 1 )                                       //灰度摄像头
  7.         LCD_Img_gray_Z       (site, size, img, imgsize);
  8. #elif   ( CAMERA_COLOR == 0 )                                       //黑白摄像头
  9.         LCD_Img_Binary_Z(site, size, img, imgsize);
  10. #endif
回复 支持 反对

使用道具 举报

发表于 2014-5-7 12:43:56 | 显示全部楼层
栾端静 发表于 2014-5-7 12:34
不是改成灰度,而是改成用灰度函数显示。

图像出来就已经黑白了,不可能真的变回灰度的

原来是这个意思啊,明白了,谢谢
回复 支持 反对

使用道具 举报

发表于 2014-5-7 12:45:24 | 显示全部楼层
草原上的星星 发表于 2014-5-7 12:35

恩恩,是这样设置的,能看到黑白图像就行了是吧,谢了,剩个串口传上位机解决不了,留个QQ吧,956602704
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部