#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include <iostream>
#include <opencv2/opencv.hpp>
#define MYPORT 8887 //UDP port
//待传输图像默认大小为 640*480,可修改
#define IMG_WIDTH 640 // 需传输图像的宽
#define IMG_HEIGHT 480 // 需传输图像的高
//默认格式为CV_8UC3
#define BUFFER_SIZE IMG_WIDTH*IMG_HEIGHT*3/32
#define ERR_EXIT(m) \
do {
\
perror(m); \
exit(EXIT_FAILURE); \
} while (0)
using namespace cv;
using namespace std;
//socket定义客户端信息
int sock;
struct sockaddr_in peeraddr;
socklen_t peerlen;
//使用opencv发送图片
//需定义全局sock作为 已连接的socket的索引
//需定义全局struct sockaddr_in peeraddr; 作为socket地址
//需定义全局socklen_t peerlen; 作为socket长度
int CVtransmit(Mat image)
{
char buf[BUFFER_SIZE];
int flag;
if (image.empty())
{
printf("empty image\n\n");
return -1;
}
if (image.cols != IMG_WIDTH || image.rows != IMG_HEIGHT || image.type() != CV_8UC3)
{
printf("the image must satisfy : cols == IMG_WIDTH(%d) rows == IMG_HEIGHT(%d) type == CV_8UC3\n\n", IMG_WIDTH, IMG_HEIGHT);
return -1;
}
for (int k = 0; k < 32; k++)
{
int num1 = IMG_HEIGHT / 32 * k;
for (int i = 0; i < IMG_HEIGHT / 32; i++)
{
int num2 = i * IMG_WIDTH * 3;
uchar* ucdata = image.ptr<uchar>(i + num1
c++ opencv socket发送图片流 服务器端广播发送代码
于 2022-07-20 10:54:42 首次发布