你这是啥?读取中文路径图片?不然直接使用imread()读取啊。你这个报错的意思就是长X宽和你的imag.size()的大小不一致,1280X1072>>99051,相当于你的图片指针长度不勾,图片丢失了当然不行了。如果你的图片指针够的话,可以直接使用 Mat img=Mat(Size(w,h),CV_8UC3,image.pbuf),前提是你的image.pbuf得长度要比w*h大才行,这样可以丢掉后面的数据(只能保证不报错,不能保证你的数据丢掉之后图片是否正常)

而且,你这后缀不对吧?
而且看你的读取方式,是从本地磁盘读取的,这个和你的结构体关系不是很大,应为你这个结构体相当于是你自己赋值的,而不是别人已经有数据的结构体给你然后你从image.pbuf里面读取的。如果是已经写好的结构体,那么他给的image.height,width和size应该是正确的数据才对,size=height*width,并且h和w就是图片本身你的大小要对应上去,这样可以直接用我上面说的Mat img=Mat(Size(w,h),CV_8UC3,image.pbuf),
你可以试试这个。之前测试读中文路径和特殊字符图片的时候写的,可以根据图片本身的大小调整,而不像你这么直接写死图片的大小。另外,都使用opencv了,我的建议是直接用cpp的读取方式。
string img_path_name="中文路径图片.jpg";
ifstream pFile(img_path_name, ios::binary);
pFile.seekg(0, pFile.end); //文件指针移到文件尾
long long LSize = pFile.tellg(); //获取文件长度
pFile.seekg(0, pFile.beg); //移动回到文件头
vector<uchar> pData(LSize);
char * buffer = (char*)malloc(sizeof(char)*LSize);
pFile.read(buffer, LSize); //将文件读取到buffer
pFile.close(); //关闭
memcpy(&pData[0], buffer, sizeof(char)*LSize); //复制
free(buffer);
buffer = nullptr;
Mat img = imdecode(pData, IMREAD_COLOR); //解码