我使用OpenCV C API从Cam捕获图像并使用TCP套接字发送它们。
服务器正在运行C ++(QT)并接收帧。
此过程正常,我可以在服务器上看到图像。
奇怪的问题是,当我关闭两个程序并重新运行客户端和服务器时,我可以再次看到我在上一次测试中看到的前一帧。
如果,我再次关闭这两个程序并重新运行它们,我可以看到一个新帧而不是第二个,并且该过程继续。
更清晰:
capture1,close,cap1,close,cap3,close,cap3,close,cap5 ......等等
我以前没见过这样的东西!
答案 0 :(得分:2)
之前我遇到过同样的问题。
帧大小非常多,你以随机的方式从缓冲区中读取(只是猜测),你必须在相机和OpenCV之间做一个定时器或确认。
试着控制相机捕捉帧的方式。
答案 1 :(得分: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();
这显示黑色图像,每个像素为零...
答案 2 :(得分:1)
当然这个问题来自相机。一旦抓取一帧,相机似乎必须收到任何确认。您可以尝试的一件事是转到发送图像的代码行并将图像保存在磁盘中,以检查cap1是否被发送两次。