总结一下之前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; }
阅读全文
0 0
- 总结一下之前socket opencv传灰度图片
- 总结一下之前socket opencv传灰度图片
- 总结一下之前socket opencv传灰度图片
- opencv读取自定义bmp灰度图片
- opencv判断图片是彩色还是灰度
- OPencv实现图片灰度图转换
- opencv对图片进行灰度化
- Android Jni OpenCV图片灰度处理
- 总结一下之前的学习笔记
- 实训之前,简单总结一下
- OpenCV分通道显示图片,灰度,融合,直方图,彩色直方图
- C++之opencv将图片批量改成灰度图
- python使用opencv将灰度图人脸图片转化为RGB
- 总结了Opencv对灰度图直方化的六种方法
- jBPM4.4:在看开发指南之前总结一下
- python opencv 创建窗口,加载图片,显示图片,灰度转换,保存图片
- OpenCV入门二:OpenCV读取一张图片显示,并将其重写为灰度图
- 试验一下传图片
- Ajax的理解
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
- bzoj 3991 虚树 set
- 重写了equals()为什么要重写hashCode()方法
- 最怕一生碌碌无为,还说平凡难能可贵。
- 总结一下之前socket opencv传灰度图片
- Basemap绘制四川轮廓
- (7)x210:2.4之前的驱动--memdev模拟驱动-涉及阻塞
- 【Java基础】(03)Java常用数据结构
- 计算鼠标偏移量
- Linux ALSA声卡驱动之八:ASoC架构中的Platform
- 如何获取通过访问获取终端类型
- KD-Tree k近点 HDU 4347
- Android常用Support库