总结一下之前socket opencv传灰度图片

来源:互联网 发布:微电子专业英语软件 编辑:程序博客网 时间:2024/06/06 01:10

之前学过点socket编程,但是忘得差不多了,最近又重新看了一下。看本文章的人可以先了解一下socket编程的基本过程,网上有很多,博主在此就不赘述了。

直接上干货。方便刚学socket 使用opencv的新人。注:首先需要配置opencv的环境才可用啊。高手勿喷!

博主用的环境为:opencv2.4.13  +   vs2013

客户端的程序:

#include <WINSOCK2.H>    #include <iostream>    #include <stdio.h>    #include <cv.h>    #include <opencv2/core/core.hpp>    #include <opencv2/highgui/highgui.hpp>    #include <opencv2/imgproc/imgproc.hpp>    using namespace cv;  using namespace std;    #pragma  comment(lib,"ws2_32.lib")      int main(int argc, char* argv[])  {      WORD sockVersion = MAKEWORD(2, 2);      WSADATA data;      if (WSAStartup(sockVersion, &data) != 0)      {          return 0;      }        SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);      if (sclient == INVALID_SOCKET)      {          printf("invalid socket !\n");          return 0;      }        sockaddr_in serAddr;      serAddr.sin_family = AF_INET;      serAddr.sin_port = htons(8888);      serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");      if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)      {          printf("connect error !\n");          closesocket(sclient);          return 0;      }      //读取图像并发送        Mat M1 = imread("D:\\lena.bmp",0);//载入图片        Mat M2(M1.rows, M1.cols, CV_8UC1); //放置灰度图像        printf("%d*%d\n", M1.rows, M2.cols);      M2 = M1.clone();      int i, j;      char sendData[1000000] = "";      cvNamedWindow("client", 1);      for (i = 0; i < M1.rows; i++)      {          uchar *data = M2.ptr<uchar>(i);          for (j = 0; j < M1.cols; j++)          {              sendData[M1.rows * i + j] = (char)data[j];          }      }      imshow("client", M1);      send(sclient, sendData, 1000000, 0);//发送        cvWaitKey(0);//任意键发送        cvDestroyWindow("client");      closesocket(sclient);      WSACleanup();      return 0;  }  

服务端的程序:

#include <stdio.h>    #include <winsock2.h>    #include <cv.h>    #include <opencv2/core/core.hpp>    #include <opencv2/highgui/highgui.hpp>    #include <opencv2/imgproc/imgproc.hpp>      #pragma comment(lib,"ws2_32.lib")    using namespace std;  using namespace cv;  int main(int argc, char* argv[])  {      //初始化WSA        WORD sockVersion = MAKEWORD(2, 2);      WSADATA wsaData;      if (WSAStartup(sockVersion, &wsaData) != 0)      {          return 0;      }      //创建套接字        SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);      if (slisten == INVALID_SOCKET)      {          printf("socket error !");          return 0;      }      //绑定IP和端口        sockaddr_in sin;      sin.sin_family = AF_INET;      sin.sin_port = htons(8888);//端口8888        sin.sin_addr.S_un.S_addr = INADDR_ANY;      if (bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)      {          printf("bind error !");      }        //开始监听        if (listen(slisten, 5) == SOCKET_ERROR)      {          printf("listen error !");          return 0;      }        //循环接收数据        SOCKET sClient;      sockaddr_in remoteAddr;      int nAddrlen = sizeof(remoteAddr);        printf("等待连接...\n");      do      {          sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);      } while (sClient == INVALID_SOCKET);      printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));        char revData[1000000] = "";      Mat M(256, 256, CV_8UC1);//接收灰度图像        uchar *p = (uchar *)M.data;      int i, j;      int ret;      while (true)      {          //接收数据            ret = recv(sClient, revData, 1000000, 0);          if (ret > 0)          {              revData[ret-1] = '\0';              for (i = 0; i < M.rows; i++)              {                  uchar *data = M.ptr<uchar>(i);                  for (j = 0; j < M.cols; j++)                  {                      data[j] = (uchar)revData[M.rows * i + j];                      //cout << (int)data[j] << " ";                  }                  cout << endl;              }              ret = 0;          }          imshow("sevice", M);          cvWaitKey(0);      }      cvDestroyWindow("server");      closesocket(slisten);      WSACleanup();      return 0;  }  



原创粉丝点击