gpt4 book ai didi

c++ - JPG 图像在 cvCreateImageHeader 之后从 30KB 变为 300KB

转载 作者:太空宇宙 更新时间:2023-11-03 22:16:18 25 4
gpt4 key购买 nike

这是我的程序的一部分:

// let's get jpg image from socket
int iRcvdBytes=recvfrom(iSockFd, buff, bufferSize, 0,
(struct sockaddr*)&cliAddr, (socklen_t*)&cliAddrLen);

// buff now contains 30KB jpg image

// let's load the jpg image to IplImage
IplImage* fIplImageHeader;
fIplImageHeader = cvCreateImageHeader(cvSize(640, 480), 8, 1);
fIplImageHeader->imageData = (char *)buff;

// now let's check the size difference
cout << "Received " << iRcvdBytes << " bytes from the client" << endl;
cout << fIplImageHeader->imageSize << endl;

输出是:

Received 31860 bytes from the client
307200

为什么会这样? cvCreateImageHeader() 是否在内部将 jpg 图像转换为 RGB 或类似的东西?我希望它保持 JPG 格式并使用 cvShowImage() 显示它。

欢迎任何帮助。

最佳答案

您正在比较压缩的 jpeg 图像数据与未压缩的像素数据的长度。

特别是,给定:

fIplImageHeader = cvCreateImageHeader(cvSize(width, height), depth, channels) 

总是这样 fIplImageHeader->imageSize == width * height * (depth/8) * channels

recvfrom() 调用接收到的字节分配给 imageData 区域首先不起作用。

关于c++ - JPG 图像在 cvCreateImageHeader 之后从 30KB 变为 300KB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com