发送彩色视频RGB888时,在上位机,通过BGR2BGR565转换为16位数据,再传输时加上行号,在DMA里也要对读出的数据进行高低位的变换,组成RGB565格式
如下图所示,在灰度图时将每帧刷新改为了每一行刷新,这是因为在彩色图像时,刷新一帧的时间大于2ms,而灰度时为0.7ms,这就会导致在刷新的时候,新的数据已经在发送了,所以图像会出错,
在改为每行刷新时,由于每行的接收也很快,所以如果带宽变大,也会导致接收问题。是否可以使用ACP口进行通信,直接进行硬件上的缓存一致性处理?
1 void MainWindow::on_OpenImage_triggered() 2 { 3 QString path; 4 5 path = OpenImage(); 6 7 if (path.length() > 0) 8 { 9 src_image = imread(path.toStdString(),-1); 10 11 if (src_image.channels() == 3) 12 { 13 cvtColor(src_image, bgr565_image, CV_BGR2BGR565); //RGB888转BGR565 14 } 15 16 cv::resize(src_image, scale_image, Size(img_w_size, img_h_size), 0, 0, INTER_LINEAR); 17 18 dis_image = MatImageToQt(scale_image); 19 pixmap = QPixmap::fromImage(dis_image); 20 ui.img_map->setPixmap(pixmap); 21 22 img_width = src_image.cols; 23 img_height = src_image.rows; 24 25 ui.img_w->setText(QString::number(img_width)); 26 ui.img_h->setText(QString::number(img_height)); 27 28 ui.prog_bar->setRange(0, 1); 29 ui.prog_bar->setValue(0); 30 } 31 }
1 void udpthread::run() 2 { 3 while (!stopped) 4 { 5 if (send_flag == 1) 6 { 7 for (int i = 0; i < pkg_num; i++) 8 { 9 memcpy(send_buf, &i, 4); 10 memcpy(send_buf+4, send_image.data + i*pkg_size, pkg_size); 11 send(hClient, (const char*)send_buf, pkg_size+4, 0); 12 } 13 14 head_buf[0] = 0xA0A1A2F0; 15 head_buf[1] = img_index; 16 17 send(hClient, (const char*)head_buf, 8, 0); 18 19 send_flag = 0; 20 } 21 } 22 }