CentOS重启后无法上网&fread与imread读图片的差别

栏目: 编程工具 · 发布时间: 6年前

内容简介:一、CentOS重启后无法上网问题真实机器(不是虚拟机)本来好好的,有网线(网卡enp0s31f6)有wifi (enp1s0)可以上网的,之前重启N次都依旧可以上网。但昨天一次重启后居然无法上网,怎么都连接不上。网上的很多办法都试过了,结果把本来仍有的enp1so都搞没了:

一、CentOS重启后无法上网问题

真实机器(不是虚拟机)本来好好的,有网线(网卡enp0s31f6)有wifi (enp1s0)可以上网的,之前重启N次都依旧可以上网。但昨天一次重启后居然无法上网,怎么都连接不上。

网上的很多办法都试过了,结果把本来仍有的enp1so都搞没了:

CentOS重启后无法上网&fread与imread读图片的差别

enp1s0没有了,于是 ip link  set   dev enp1s0 up 想将这个网卡重新启动,然后再用ip addr 好像就看到了enp1s0 (此处不太记得了)。

但是此时service network start仍旧是失败的,

此时 cd /etc/init.d 或者/ect/rc.d/init.d 后 ./network restart 仍旧是失败的(此处也不太记得了)。然后按照  https://www.cnblogs.com/yxyht/p/5063505.html 在/etc/sysconfig/network-scripts/下新建了一个ifcfg-enp1s0,按照ifcfg-enp0s31f6里面的内容,修改相应地方。

但是重启后  service network start 仍旧是失败的,但是 ping www.baidu.com已经通了。证明可以上网了哈哈。

具体原因我也不太清楚。

二、fread()与imread()读取bmp图片的差别

之前是用opencv读取bmp图片Mat.data拿到图片指针然后映射到buffer会导致严重的内存到内存的拷贝问题,严重拉低了OpenCL

的效率。所以只能改用fread()直接读到buffer的映射指针内,这样就避免了CPU到CPU的拷贝。我用的是:

bool readBmp2Ptrwhole(char *BmpFileName,uchar *imgdata)

{

FILE * pFile;

int dataOffset;

pFile = fopen(BmpFileName,"rb");

if(!pFile)

{

return false;

}

//得到数据的偏移字节

fseek(pFile,DataOffset,SEEK_SET);

fread(&dataOffset,4,1,pFile);

//得到bmp的宽与高的像素数

fseek(pFile,SizeOffset,SEEK_SET);

int bmpWidth,bmpHeight;

fread(&bmpWidth,4,1,pFile);

fread(&bmpHeight,4,1,pFile);

//注意,有些图片存在取出为负的情况

bmpWidth = abs(bmpWidth);

bmpHeight = abs(bmpHeight);

fseek(pFile,BiBitCount,SEEK_CUR);

int bmpBiBitCount;

fread(&bmpBiBitCount, 2, 1, pFile);

//printf("biBitCount %d\n",newBmpData->bmpBiBitCount);

//位图片数据分配空间

int BytesPerPixel = bmpBiBitCount / 8;

int LineLength, TotalLength;

LineLength = bmpWidth * BytesPerPixel; // 每行数据长度大致为图象宽度乘以

// 每像素的字节数

while( LineLength % 4 != 0 ) // 修正LineLength使其为4的倍数

++LineLength;

TotalLength = LineLength * bmpHeight; // 数据总长 = 每行长度 * 图象高度

// imgdata = (unsigned char *)malloc(TotalLength * sizeof(unsigned char));

fseek(pFile,dataOffset,SEEK_SET);

fread(imgdata , sizeof(unsigned char), (size_t)(long)TotalLength, pFile);

fclose(pFile);

return true;

}

用这个读到已经分配好的imgdata内。但我发现与opencv的imread得到的Mat.data数据不一样。我以为是上面这个函数错的,读图有问题,于是我用下面这个函数将刚刚读到的imgdata转化为图片保存,看是否与原图一致:

bool SaveBmp(int w, int h, unsigned char *pdata, char *BmpFileName, bool IsRGBA )

{

#define BMP_Header_Length 54

unsigned char header[BMP_Header_Length] = {

0x42, 0x4d, 0, 0, 0, 0, 0, 0, 0, 0,

54, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, IsRGBA ? 32 : 24, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0

};

long file_size = (long)w * (long)h * (IsRGBA ? 4 : 3) + 54;

header[2] = (unsigned char)(file_size &0x000000ff);

header[3] = (file_size >> 8) & 0x000000ff;

header[4] = (file_size >> 16) & 0x000000ff;

header[5] = (file_size >> 24) & 0x000000ff;

long width = w;

header[18] = width & 0x000000ff;

header[19] = (width >> 8) &0x000000ff;

header[20] = (width >> 16) &0x000000ff;

header[21] = (width >> 24) &0x000000ff;

long height = h;

header[22] = height &0x000000ff;

header[23] = (height >> 8) &0x000000ff;

header[24] = (height >> 16) &0x000000ff;

header[25] = (height >> 24) &0x000000ff;

FILE *pWritingFile = NULL;

pWritingFile = fopen(BmpFileName, "wb");

if( pWritingFile == NULL )

return false;

fwrite(header, sizeof(unsigned char), 54, pWritingFile);

int BytesPerPixel = IsRGBA ? 4 : 3;

int LineLength, TotalLength;

LineLength = w * BytesPerPixel; // 每行数据长度大致为图象宽度乘以

// 每像素的字节数

while( LineLength % 4 != 0 ) // 修正LineLength使其为4的倍数

++LineLength;

TotalLength = LineLength * h; // 数据总长 = 每行长度 * 图象高度

//fwrite(pdata, PixelDataLength, 1, pWritingFile);

fwrite(pdata, sizeof(unsigned char), (size_t)(long)TotalLength, pWritingFile);

// 释放内存和关闭文件

fclose(pWritingFile);

return true;

}

结果保存出来又是与原图一致的。说明这两个函数都是正确的。

结果同事告诉我,是bmp的编码格式问题:https://blog.csdn.net/herbenlam/article/details/53432004   这里说明了bmp是按从下到上编码的(这也表现在 fread(&bmpWidth,4,1,pFile); fread(&bmpHeight,4,1,pFile); 这两句得到的高宽是负数,负数表示从下到上,正数表示从上到下),而opencv是将bmp的从下到上转化了一下转化为从上到下在Mat.data里。而fread(bmp)和fwrite(bmp)都是从最后一行读(写)到第一行从而完成对bmp图像的读(写)。

所以我比较了readBmp2Ptrwhole()读出来的最后一行与opencv的imread的Mat.data的第一行,果然数据一致了。

哎,想问题不够深入。

Linux公社的RSS地址: https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-08/153585.htm


以上所述就是小编给大家介绍的《CentOS重启后无法上网&fread与imread读图片的差别》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法分析

数据结构与算法分析

韦斯 (Mark Allen Weiss) / 机械工业出版社 / 2013-2-1 / 79.00元

本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长。本书将算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,并细致讲解精心构造程序的方法,内容全面、缜密严格。 第3版的主要更新如......一起来看看 《数据结构与算法分析》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器