上位机源码 | 包含C#上位机源码,已完成一部分的注释工作,可后期自行增加新功能 |
---|---|
.exe | 打包好的可执行文件,平时使用直接打开这个文件即可 |
Readme.md | 程序说明文件 |
.sln | 程序源码 |
Test_CAMERA(); //PASS,测试龙邱神眼摄像头并在屏幕上显示 LQ_CAMERA.h 中选择屏幕
右键查看定义,取消注释其中的CAMERA_REPORT函数
//上报数据给上位机 串口速度比较慢 注意上位机图像宽高设置为120*160
//CAMERA_Reprot();
-
编译并烧录程序,重启单片机
-
切换回摄像头上位机,选择合适的端口号和波特率,打开串口,接收图像,此时即可看见摄像头拍摄的原始灰度图像
- 再点击右下角获取图像信息及二值化处理,可得到此时图像的灰度分布以及二值化之后的图像
- 还可以通过手动设置右上角的二值化阈值改进二值化效果,方便前期调参。
- 仿照CAMERA_Reprot()函数,自定义Bin CAMERA_Reprot(),传输二值化无损压缩图像
void CAMERA_Bin_Reprot (void)
{
short j, i;
char send;
/////////////////////////////////////////////////////////////////////
//压缩算法
///////////////////////////////////////////////////////////////////////
UART_PutChar(UART0, 0xfe); //帧头
UART_PutChar(UART0, 0xef); //帧头
for (i = 0; i < LCDH; i++)
{
for (j = 0; j < LCDW;)
{
//二值化不会发送帧尾
//数据压缩
send=Bin_Image[i][j]+Bin_Image[i][j+1]<<1\
+Bin_Image[i][j+2]<<2+Bin_Image[i][j+3]<<3\
+Bin_Image[i][j+4]<<4+Bin_Image[i][j+5]<<5\
+Bin_Image[i][j+6]<<6+Bin_Image[i][j+7]<<7;
//一行版本
/*
send=Bin_Image[i][j]+(Bin_Image[i][j+1]<<1)+(Bin_Image[i][j+2]<<2)+(Bin_Image[i][j+3]<<3)+(Bin_Image[i][j+4]<<4)+(Bin_Image[i][j+5]<<5)+(Bin_Image[i][j+6]<<6)+(Bin_Image[i][j+7]<<7);
*/
//压缩8倍
j+=8;
UART_PutChar(UART0, send); //发送数据
}
}
UART_PutChar(UART0, 0xef); //帧尾
UART_PutChar(UART0, 0xfe); //帧尾
}
-
将原来调用CAMERA_Reprot()函数的地方注释,二值化之后调用自定义Bin CAMERA_Reprot()函数
/* 二值化 */ Get_Bin_Image(1); //上报数据给上位机 串口速度比较慢 注意上位机图像宽高设置为120*160 CAMERA_Bin_Reprot();
-
编译并烧录,重启单片机
-
切换回上位机,在右侧开启二值化接收
-
此时只传输二值化图像,八倍速传速,速度还可以
-
上位机修改:本上位机基于龙邱上位机开源方案修改(当然龙邱也是根据开源方案修改),此为开源的第一版,主要是增加了注释,方便大家后续的修改。
点击查看代码,主要为增加了ReceiveBinImage()函数,串口发送接收的框架无需修改,可增加自己使用的图像尺寸,或者直接改成输入框输入尺寸(注意同步修改单片机发送函数),也可以增加更多的显示功能。
-
缺陷:1.0版本无线串口模块波特率一般就开到468000,即一秒发送58500个char,即使是压缩到四分之一的图像也有600个char,也即发送用时10ms,这在正常运行时几乎是不可以接受的;2.0版本可以在8ms内发送120x160的图像,也可以在2ms内发送压缩到四分之一的图像,除了软件上面的修改,主要是发送硬件更换了方案,因此暂不开源,期待大家有更好的方案或是压缩算法。