|
零知增强板-DCMI接口 OV2640 摄像头 串口输出/LCD显示
http://www.lingzhilab.com/forum. ... d=893&fromuid=2
零知-平台软件源码,上位机调试工具、上位机工具源码请到零知官网下载。
本文将演示在零知增强板上进行摄像头的显示和传输,零知增强板自带摄像头接口,可以直接接入OV2640\OV7670等相同接口的摄像头模块。
1、硬件连接:
本文使用OV2640模块:http://www.lingzhilab.com/forum. ... 96&highlight=ov
该模块可以直接接入零知-增强板,不需要其他连线,如果要在LCD上显示,则按照之前的教程接入TFT屏的连线即可。
2、程序:
1)在LCD上直接显示图像,在工程代码camera.h中:
#define JPEG_OUTPUT_MODE//注释掉此行代码,表示RGB565模式,不注释就是JPG模式
2)抓取JPG格式图像,然后通过串口传输到PC显示
图像存储到了jpeg_buf中,然后我们把数据通过串口发送出去,这里使用Serial3传输图像数据,波特率设置为 460800,这样可以有比较高的帧率。
位机解析并显示:
3)上位机解析数据并显示
在PC端,串口收到数据后,按照jpg图像格式解析并显示,以下为Qt平台的代码:
[mw_shl_code=arduino,true]
QByteArray str1;
QByteArray str2;
QByteArray str3;
QByteArray str4;
bool start = false;
str1 = m_serial->read(1);
if(str1.contains(start_flag.at(0))){
str2 = m_serial->read(1);
if(str2.contains(start_flag.at(1))){
str3 = m_serial->read(1);
if(str3.contains(start_flag.at(2))){
str4 = m_serial->read(1);
if(str4.contains(start_flag.at(3))){
start = true;
}
}
}
}
if(start == false){
continue;
}
QByteArray str;
str.append(str1);
str.append(str2);
str.append(str3);
str.append(str4);
// if(str.contains(start_flag))
{
qDebug()<<"frame start,num="<<m_fram_num;
m_frameBuff.clear();
m_frameBuff.append(str);
while(1){
if(m_serial->bytesAvailable()){
if(!m_serial->isOpen()){
return;
}
QByteArray bytes = m_serial->read(1);
m_frameBuff.append(bytes);
if(bytes.contains(end_flag.at(0))){
QByteArray byte2 = m_serial->read(1);
m_frameBuff.append(byte2);
if(byte2.contains(end_flag.at(1))){
break;
}
}
}
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
qDebug()<<"frame read done"<<","<<m_frameBuff.size();
qDebug()<<"buff:"<<m_frameBuff.toHex();
QString picname = QString("temp%1.jpg").arg(m_fram_num);
m_fram_num++;
QImage img = QImage::fromData(m_frameBuff);
QPixmap pixmap = QPixmap::fromImage(img);
ui->labelPIC->setPixmap(pixmap);[/mw_shl_code]
|
|