4

我正在使用 OpenCV C API 从凸轮捕获图像并使用 TCP 套接字发送它们。

服务器正在运行 C++ (QT) 并接收帧。

该过程运行良好,我可以在服务器上看到图像。

奇怪的问题是,当我关闭这两个程序并重新运行客户端和服务器时,我可以再次看到我在之前的测试中看到的前一帧。

如果我再次关闭这两个程序并重新运行它们,我可以看到一个新框架而不是第二个框架,并且该过程继续进行。

为了更清楚:

捕获1,关闭,cap1,关闭,cap3,关闭,cap3,关闭,cap5 ......等

我以前没见过这样的东西!

4

3 回答 3

2

我以前也有同样的问题。

帧大小非常大,并且您以随机方式从缓冲区中读取(只是猜测),您必须在相机和 OpenCV 之间设置一个计时器或确认。

只需尝试控制相机捕获帧的方式即可。

于 2013-01-23T13:52:47.897 回答
1

我不太了解 TCP/IP 编程或客户端/服务器……但我只能建议初始化图像,通常在相机/客户端/服务器类的构造函数中,

    Mat Frame = Mat::zeros(rows,cols,CV_8UC3);

这样每次客户端/服务器初始化或在您准备好交换图像之前...启动图像是一个空白图像...

您必须使用cvCreatImage().. 进行初始化,因此您可以执行以下操作...

IplImage *m = cvCreateImage(cvSize(200,200),8,3);// say its 200 x 200
cvZero(m);
cvShowImage("BLANK",m);
cvvWaitKey();

这显示了每个像素为零的黑色图像...

于 2013-01-10T05:30:39.877 回答
1

当然,这个问题来自相机。似乎一旦抓取一帧,相机就必须接收任何确认。您可以尝试的一件事是转到发送图像的代码行并将图像保存在磁盘中,以检查是否发送了两次 cap1。

于 2013-01-18T08:07:45.993 回答