打算在树莓派上挂载摄像头,通过WIFI模块传输到上位机。局域网内带宽不是问题,为了保证实时性,也没有必要进行复杂的视频编码和解码,于是通过截图然后使用UDP协议传输应该是可以的。所以最近试探性地使用了Qt和opencv进行测试,上位机接收到视频帧后使用Haar人脸识别后再传回一个坐标给下位机,结果还行。
1.下位机(图像采集端)
Qt中使用QUdpSocket类来发送和接收UDP数据报。Socket就是套接字,简单来说就是一个IP地址加上port端口号。它支持IPv4广播,简单起见这里使用广播模式。VideoCapture类用于获取视频或者摄像头设备。
private:
Ui::Sender *ui;
QUdpSocket *sender;
QUdpSocket *receiver;
cv::Mat frame;
int timerID;
cv::VideoCapture capture;
- 在.h文件中声明两个QUdpSocket和QVideoCapture成员变量
Sender::Sender(QWidget *parent) :
QDialog(parent),
ui(new Ui::Sender)
{
ui->setupUi(this);
sender = new QUdpSocket(this);
capture.open(0);
if(!capture.isOpened())
{
cout << "open failed" <<endl;
}
int delay =1000/10;
timerID = this->startTimer(delay);
receiver = new QUdpSocket(this);
receiver->bind(45455, QUdpSocket::ShareAddress);
connect(receiver, &QUdpSocket::readyRead, this, &Sender::processPendingDatagram);
}
VideoCapture对象使用open()方法来打开视频或者摄像头。传入int是指定设备ID,可以在设备管理器查找,一般是0。也可以传入路