Quantcast
Channel: Installation and Deployment
Viewing all articles
Browse latest Browse all 22112

Error sending Iplimage using TCP

$
0
0
I am trying to capture frames from a Logitech HD cam connected to a Raspberry Pi through usb, the RP is running arch linux and I am using OpenCV C api and a TCP client. The TCP server is running c++(QT) under ubuntu. I am storing the frame->imageData in a buffer and then send the data in the buffer. this is a proof of concept that this idea works fine where tmpframe should be the new frame constructed on the server: CvCapture *capture = cvCaptureFromCAM(1);     cvNamedWindow( "mywindow", CV_WINDOW_AUTOSIZE );         int i =1;          while ( 1 ) {          // Get one frame          IplImage* frame = cvQueryFrame( capture );          CvSize size;          size.height = 480;       size.width = 640;          IplImage* tmpframe = cvCreateImageHeader(size, IPL_DEPTH_8U, 3); //create a new frame          if ( !frame ) {            //fprintf( stderr, "ERROR: frame is null...\n" );            getchar();            break;          }else          {              //std::cout<<i<<std::endl;              char buffer[frame->imageSize];              snprintf(buffer,frame->imageSize,"%s",frame->imageData);              //printf("frame->height= %s\n",buffer);                            tmpframe->imageData = buffer;              printf("data %s\n",tmpframe->imageData);                            //snprintf(IDbuffer,10,"%d",frame->ID);              //printf("frame->ID= %s\n",IDbuffer);              i++;          }          cvShowImage( "mywindow", tmpframe ); actually this code is running perfectly, Here is my client.c file: #include <opencv/cv.h>  #include <opencv/highgui.h>  #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h>     void error(char *msg) {  perror(msg);  exit(0); }   int main(int argc,char *argv[]) {   int sockfd,portno,n;  struct sockaddr_in serv_addr;  struct hostent *server;  //char buffer[999999];    if(argc <3)  {   fprintf(stderr,"usage %s hostname portname port\n",argv[0]);   exit(0);  }    portno = atoi(argv[2]);  sockfd = socket(AF_INET , SOCK_STREAM,0);    if(sockfd < 0)  {   error("ERROR OPENING SOCKET");  }    server = gethostbyname(argv[1]);  if(server == NULL)  {   fprintf(stderr,"ERROR,NO SUCH HOST\n");   exit(0);  }    bzero((char*)&serv_addr,sizeof(serv_addr));  serv_addr.sin_family = AF_INET;    bcopy((char*)server->h_addr,(char*)&serv_addr.sin_addr.s_addr,server->h_length);  serv_addr.sin_port = htons(portno);    if(connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)  {   error("ERROR CONNECTING");  }     CvCapture *capture = cvCaptureFromCAM(1);        // Show the image captured from the camera in the window and repeat         int i =1;          while ( 1 ) {          // Get one frame          IplImage* frame = cvQueryFrame( capture );          if ( !frame ) {            //fprintf( stderr, "ERROR: frame is null...\n" );            getchar();            break;          }else          {              i++;          }          //bzero (buffer,999999);          //strncpy(buffer,frame->imageData,sizeof(frame->imageData) -1);          char *msg = frame->imageData;          char buffer[frame->imageSize];          bzero (buffer,frame->imageSize);          snprintf(buffer,frame->imageSize,"%s",msg);  n=write(sockfd,buffer,frame->imageSize);  if(n <0)  {   error("ERROR READING FROM SOCKET");  }  //printf("%s\n",buffer);      } return 0; }           and this is how I am receiving data on my server: void HostConnector::readyRead() {     QByteArray Data = socket->readAll();         CvSize size;     size.height = 480;     size.width = 640;     IplImage *frame = cvCreateImageHeader(size, IPL_DEPTH_8U, 3);             frame->imageData = Data.data();     cvShowImage( "mywindow", frame );   } But the server is crashing !! a segmentation fault at cvShowImage( "mywindow", frame );

Viewing all articles
Browse latest Browse all 22112

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>