#include<stdio.h>#include<errno.h>#include<string.h>#include<netdb.h>#include<sys/types.h>#include<netinet/in.h>#include<sys/socket.h>#include<stdlib.h>#include<unistd.h>#include<arpa/inet.h>#include<netdb.h>#include<iostream>#include<opencv2/highgui/highgui.hpp>#include<fstream>#include<thread>#define MAXLINE 4096usingnamespace std;usingnamespace cv;intcapture_image(){
VideoCapture capture(0);if(!capture.isOpened()){
std::cout <<"capture camera error! "<< std::endl;}
cv::namedWindow("capture frame", CV_WINDOW_NORMAL);
std::cout <<"Press C to save the current frame\n to quit the frame fetching process by Q\n"<< std::endl;
Mat frame;int count =0;char filename[64];while(true){
capture >> frame;if(frame.empty()){break;}
cv::imshow("capture frame", frame);if((char)waitKey(10)=='C'){
count++;//filename = "calib" + to_string(count) + ".jpg";sprintf(filename,"%d.jpg", count);
cout << filename << endl;imwrite(filename, frame);
std::cout <<"Successfully retrieve the current frame and use the file name"<< filename <<"saved..."<< std::endl;
std::cout <<"Press C to save the current frame...\n to quit the frame fetching process by Q...\n"<< std::endl;}elseif((char)waitKey(10)=='Q'){
std::cout <<"Saved images"<< std::endl;
std::cout <<"include"<< count <<"picture(s)..."<< std::endl;break;}}
capture.release();//释放对象return0;}intmain(int argc,char** argv){
std::thread t1(capture_image);
t1.join();int sockfd, len;char buffer[MAXLINE];struct sockaddr_in servaddr;
FILE *fq;if( argc !=2){printf("usage: ./client <ipaddress>\n");return0;}if((sockfd =socket(AF_INET, SOCK_STREAM,0))<0){printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);return0;}memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port =htons(8000);if(inet_pton(AF_INET, argv[1],&servaddr.sin_addr)<=0){printf("inet_pton error for %s\n",argv[1]);return0;}if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0){printf("connect error: %s(errno: %d)\n",strerror(errno),errno);return0;}if(( fq =fopen("1.jpg","rb"))==NULL){printf("File can not open.\n");close(sockfd);exit(1);}bzero(buffer,sizeof(buffer));while(!feof(fq)){
len =fread(buffer,1,sizeof(buffer), fq);if(len !=write(sockfd, buffer, len)){printf("write.\n");break;}}close(sockfd);fclose(fq);return0;}