0

私は OpenCV を初めて使用します。送信側で停止と待機プロトコルを実装しました。送信側で OpenCV を使用して、Web カメラからフレームをキャプチャし、それらを受信側に送信しました。受信側で OpenCV を使用してカメラを使用すると問題が発生します。エラーが表示されます:

 OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported        array type) in cvGetMat, file /home/mihai/OpenCV-2.4.1/modules/core/src/array.cpp, line 2482
 terminate called after throwing an instance of 'cv::Exception'
 what():  /home/mihai/OpenCV-2.4.1/modules/core/src/array.cpp:2482: error: (-206)     Unrecognized or unsupported array type in function cvGetMat

send.c


#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "lib.h"

#include "cv.h" 
#include "highgui.h" 

#define HOST    "127.0.0.1"
#define PORT    10000

int main(int argc, char *argv[])
{
msg t;
my_pkt p;
int fd, count, filesize;
struct stat f_status;
char buffer[MSGSIZE];

init(HOST, PORT);
printf("[SENDER] Server rocks.\n");
printf("[SENDER] File to send: %s\n", argv[1]);

 CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if(!capture) {
    fprintf(stderr, "ERROR:capture is null\n"  );
    getchar();
    return -1;
}
printf("[SERVER] File transfer begins.\n");
while(1) {
    IplImage* frame = cvQueryFrame(capture);
    if(!frame) {
        fprintf(stderr,"ERROR:frame is null...\n");
        getchar();
        break;
    }
    memset(t.payload, 0, sizeof(t.payload));
    memset(p.payload, 0, sizeof(p.payload));

    p.type = TYPE3;
    memcpy(p.payload, frame, 8);
    t.len = 8;
    memcpy(t.payload, &p, t.len);
    send_message(&t);

    if (recv_message(&t) < 0) {
        perror("[SENDER] Receive error");
        return -1;
    }

    p = *((my_pkt *) t.payload);
    if (p.type != TYPE4) {
        perror("[SENDER] Receive error");
        return -1;
    }
}
cvReleaseCapture( &capture );
printf("[SERVER] File transfer has ended.\n");  
close(fd);

return 0;
}






recv.c

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>

#include "cv.h" 
#include "highgui.h"
#include "lib.h"

#define HOST "127.0.0.1"
#define PORT 10001

int main(void)
{
msg t;
my_pkt p;
int filesize, read_so_far, fd;
char filename[MSGSIZE];

init(HOST, PORT);
printf("[RECEIVER] Client rocks.\n");
cvNamedWindow( "camera_jigodiei", CV_WINDOW_AUTOSIZE );
/* Wait for file contents - TYPE 3 messages */
printf("[RECEIVER] Gonna wait for file chunks.\n");
while (1) {
    memset(t.payload, 0, sizeof(t.payload));

    if (recv_message(&t) < 0) {
        perror("[RECEIVER] Receive message");
        return -1;
    }

    p = *((my_pkt*) t.payload);
    IplImage* frame=malloc(sizeof(p.payload) );

    memmove(frame,&p,sizeof(p.payload) );
    if ( !frame ) {
   fprintf( stderr, "ERROR: frame is null...\n" );
   getchar();
   break;
 }


        cvShowImage( "camera_jigodiei", frame );//HERE I HAVE THE ERROR****



    memset(t.payload, 0, sizeof(t.payload));
    memset(p.payload, 0, sizeof(p.payload));

    p.type = TYPE4;
    memcpy(p.payload, ACK_T3, strlen(ACK_T3));
    t.len = strlen(p.payload) + sizeof(int);
    memcpy(t.payload, &p, t.len);
    send_message(&t);
    if ( (cvWaitKey(10) & 255) == 27 ) break;
    }

   cvDestroyWindow( "camera_jigodiei" );

printf("[RECEIVER] All done.\n");
close(fd);

return 0;
}

送信者と受信者がフレームの送受信を行っていることを確認しました。問題は OpenCV にあります。

4

0 に答える 0