欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。

该系列文章主要讲解Python OpenCV图像处理和图像识别知识,前期主要讲解图像处理基础知识、OpenCV基础用法、常用图像绘制方法、图像几何变换等,中期讲解图像处理的各种运算,包括图像点运算、形态学处理、图像锐化、图像增强、图像平滑等,后期研究图像识别、图像分割、图像分类、图像特效处理以及图像处理相关应用。

上一篇文章介绍了图像算法运算与逻辑运算,包括图像加法、图像减法、图像与运算、图像或运算、图像非运算与图像异或运算。这篇文章将详细讲解图像融合处理和ROI区域绘制,同时补充图像属性、通道和类型转换。希望文章对您有所帮助,如果有不足之处,还请海涵。

文章目录

  • 一.图像融合
  • 二.图像ROI区域定位
  • 三.图像属性
  • 四.图像通道分离及合并
  • 五.图像类型转换
  • 六.总结

下载地址:

  • https://github.com/eastmountyxz/Python-zero2one

前文赏析:

第一部分 基础语法

  • [Python从零到壹] 一.为什么我们要学Python及基础语法详解
  • [Python从零到壹] 二.语法基础之条件语句、循环语句和函数
  • [Python从零到壹] 三.语法基础之文件操作、CSV文件读写及面向对象

第二部分 网络爬虫

  • [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
  • [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解
  • [Python从零到壹] 六.网络爬虫之BeautifulSoup爬取豆瓣TOP250电影详解
  • [Python从零到壹] 七.网络爬虫之Requests爬取豆瓣电影TOP250及CSV存储
  • [Python从零到壹] 八.数据库之MySQL基础知识及操作万字详解
  • [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)
  • [Python从零到壹] 十.网络爬虫之Selenium爬取在线百科知识万字详解(NLP语料构造必备技能)

第三部分 数据分析和机器学习

  • [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)
  • [Python从零到壹] 十二.机器学习之回归分析万字总结全网首发(线性回归、多项式回归、逻辑回归)
  • [Python从零到壹] 十三.机器学习之聚类分析万字总结全网首发(K-Means、BIRCH、层次聚类、树状聚类)
  • [Python从零到壹] 十四.机器学习之分类算法三万字总结全网首发(决策树、KNN、SVM、分类算法对比)
  • [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解
  • [Python从零到壹] 十六.文本挖掘之词云热点与LDA主题分布分析万字详解
  • [Python从零到壹] 十七.可视化分析之Matplotlib、Pandas、Echarts入门万字详解
  • [Python从零到壹] 十八.可视化分析之Basemap地图包入门详解
  • [Python从零到壹] 十九.可视化分析之热力图和箱图绘制及应用详解
  • [Python从零到壹] 二十.可视化分析之Seaborn绘图万字详解
  • [Python从零到壹] 二十一.可视化分析之Pyechart绘图万字详解
  • [Python从零到壹] 二十二.可视化分析之OpenGL绘图万字详解
  • [Python从零到壹] 二十三.十大机器学习算法之决策树分类分析详解(1)
  • [Python从零到壹] 二十四.十大机器学习算法之KMeans聚类分析详解(2)
  • [Python从零到壹] 二十五.十大机器学习算法之KNN算法及图像分类详解(3)
  • [Python从零到壹] 二十六.十大机器学习算法之朴素贝叶斯算法及文本分类详解(4)
  • [Python从零到壹] 二十七.十大机器学习算法之线性回归算法分析详解(5)
  • [Python从零到壹] 二十八.十大机器学习算法之SVM算法分析详解(6)
  • [Python从零到壹] 二十九.十大机器学习算法之随机森林算法分析详解(7)
  • [Python从零到壹] 三十.十大机器学习算法之逻辑回归算法及恶意请求检测应用详解(8)
  • [Python从零到壹] 三十一.十大机器学习算法之Boosting和AdaBoost应用详解(9)
  • [Python从零到壹] 三十二.十大机器学习算法之层次聚类和树状图聚类应用详解(10)

第四部分 Python图像处理基础

  • [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置
  • [Python从零到壹] 三十四.OpenCV入门详解——显示读取修改及保存图像
  • [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形
  • [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解
  • [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制

第五部分 Python图像运算和图像增强

第六部分 Python图像识别和图像处理经典案例

第七部分 NLP与文本挖掘

第八部分 人工智能入门知识

第九部分 网络攻防与AI安全

第十部分 知识图谱构建实战

扩展部分 人工智能高级案例

作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。


一.图像融合

图像融合通常是指多张图像的信息进行融合,从而获得信息更丰富的结果,能够帮助人们观察或计算机处理。图5-1是将两张不清晰的图像融合得到更清晰的效果图。

图像融合是在图像加法的基础上增加了系数和亮度调节量,它与图像的主要区别如下[1-3]:

  • 图像加法:目标图像 = 图像1 + 图像2
  • 图像融合:目标图像 = 图像1 × 系数1 + 图像2 × 系数2 + 亮度调节量

在OpenCV中,图像融合主要调用addWeighted()函数实现,其原型如下。需要注意的是,两张融合图像的像素大小必须一致,参数gamma不能省略。

dst = cv2.addWeighted(scr1, alpha, src2, beta, gamma)
dst = src1 * alpha + src2 * beta + gamma

下面的代码是将两张图片进行图像融合,两张图片的系数均为1。

#coding:utf-8
# By:Eastmount
import cv2
import numpy as np
import matplotlib.pyplot as plt#读取图片
src1 = cv2.imread('lena.png')
src2 = cv2.imread('luo.png')#图像融合
result = cv2.addWeighted(src1, 1, src2, 1, 0)#显示图像
cv2.imshow("src1", src1)
cv2.imshow("src2", src2)
cv2.imshow("result", result)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如图5-2所示,它将src1图像和src2图像按比例系数进行了融合,生成目标结果图result。

同样可以设置不同的融合比例,图5-3是下面核心函数的效果图。

  • cv2.addWeighted(src1, 0.6, src2, 0.8, 10)


二.图像ROI区域定位

ROI(Region of Interest)表示感兴趣区域,是指从被处理图像以方框、圆形、椭圆、不规则多边形等方式勾勒出需要处理的区域。可以通过各种算子(Operator)和函数求得感兴趣ROI区域,被广泛应用于热点地图、人脸识别、图像分割等领域。如图5-4获取Lena图的脸部轮廓[4]。

通过像素矩阵可以直接获取ROI区域,如img[200:400, 200:400]。下面的代码是获取脸部ROI区域并显示。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np#读取图片
img = cv2.imread("lena.png")#定义200×200矩阵 3对应BGR
face = np.ones((200, 200, 3))#显示原始图像
cv2.imshow("Demo", img)#显示ROI区域
face = img[150:350, 150:350]
cv2.imshow("face", face)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如图5-5所示,它将Lena原图的脸部提取出来。

同样,如果想将提取的ROI区域融合至其他图片,则使用赋值语句即可。下面代码是将提取的Lena头部轮廓融合至一幅新的图像中。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np#读取图片
img = cv2.imread("Lena.png")
test = cv2.imread("luo.png",)#定义150×150矩阵 3对应BGR
face = np.ones((150, 150, 3))#显示原始图像
cv2.imshow("Demo", img)#显示ROI区域
face = img[200:350, 200:350]
test[250:400, 250:400] = face
cv2.imshow("Result", test)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如图5-6所示,它将提取的150×150脸部轮廓融合至新的图像[250:400, 250:400] 区域。


三.图像属性

前面一篇文章中我们已经看到了size、shape等关键字。这篇文章就对图像中最常见的三个属性进行介绍,它们分别是图像形状(shape)、像素大小(size)和图像类型(dtype)。

(1)shape
通过shape关键字获取图像的形状,返回包含行数、列数、通道数的元组。其中灰度图像返回行数和列数,彩色图像返回行数、列数和通道数。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy#读取图片
img = cv2.imread("luo.png")#获取图像形状
print(img.shape)#显示图像
cv2.imshow("Demo", img)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

最终输出结果如图5-7所示,(412,412,3),它表示该图像共412行、412列像素,包括3个通道。

(2)size
通过size关键字获取图像的像素数目,其中灰度图像返回行数×列数,彩色图像返回行数×列数×通道数。下述代码就是获取“luo.png”图像的大小。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy#读取图片
img = cv2.imread("luo.png")#获取图像形状
print(img.shape)#获取像素数目
print(img.size)

输出结果如下所示,包含510468个像素,即为413×412×3。

  • (412, 412, 3)
  • 509232

(3)dtype
通过dtype关键字获取图像的数据类型,通常返回uint8。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy#读取图片
img = cv2.imread("Lena.png")#获取图像形状
print(img.shape)#获取像素数目
print(img.size)#获取图像数据类型
print(img.dtype)

四.图像通道分离及合并

OpenCV通过split()函数和merge()函数实现对图像通道的处理,包括通道分离和通道合并。

(1)split()函数
OpenCV读取的彩色图像由蓝色(B)、绿色(G)、红色(R)三原色组成,每一种颜色可以认为是一个通道分量[4],如图5-8所示。

split()函数用于将一个多通道数组分量成三个单通道,其函数原型如下所示:

  • mv = split(m[, mv])
    – m表示输入的多通道数组
    – mv表示输出的数组或vector容器

下面的代码是获取彩色“小珞珞”图像三个颜色通道并分别显示。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy#读取图片
img = cv2.imread("luo.png")#拆分通道
b, g, r = cv2.split(img)#显示原始图像
cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

显示结果如图5-9所示,它展示了B、G、R三个通道的颜色分量。

同时,可以获取不同通道颜色,核心代码为:

  • b = cv2.split(a)[0]
  • g = cv2.split(a)[1]
  • r = cv2.split(a)[2]

(2)merge()函数
该函数是split()函数的逆向操作,将多个数组合成一个通道的数组,从而实现图像通道的合并,其函数原型如下:

  • dst = merge(mv[, dst])
    – mv表示输入的需要合并的数组,所有矩阵必须有相同的大小和深度
    – dst表示输出具有与mv相同大小和深度的数组

实现图像三个颜色通道融合的代码如下:

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np#读取图片
img = cv2.imread("luo.png")#拆分通道
b, g, r = cv2.split(img)#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

显示结果如图5-10所示,它将拆分的B、G、R三个通道的颜色分量进行了合并,接着显示合并后的图像。

同时,可以调用该函数提取图像的不同颜色,比如提取B颜色通道,G、B通道设置为0。代码如下所示:

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np#读取图片
img = cv2.imread("luo.png")
rows, cols, chn = img.shape#拆分通道
b = cv2.split(img)[0]#设置g、r通道为0
g = np.zeros((rows,cols), dtype=img.dtype)
r = np.zeros((rows,cols), dtype=img.dtype)#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

此时显示的图像为蓝色通道,如图5-11所示,其他颜色的通道方法也类似。


五.图像类型转换

在日常生活中,我们看到的大多数彩色图像都是RGB类型,但是在图像处理过程中,常常需要用到灰度图像、二值图像、HSV、HSI等颜色。图像类型转换是指将一种类型转换为另一种类型,比如彩色图像转换为灰度图像、BGR图像转换为RGB图像。OpenCV提供了200多种不同类型之间的转换,其中最常用的包括3类,如下:

  • cv2.COLOR_BGR2GRAY
  • cv2.COLOR_BGR2RGB
  • cv2.COLOR_GRAY2BGR

OpenCV提供了cvtColor()函数实现这些功能。其函数原型如下所示:

  • dst = cv2.cvtColor(src, code[, dst[, dstCn]])
    – src表示输入图像,需要进行颜色空间变换的原图像
    – dst表示输出图像,其大小和深度与src一致
    – code表示转换的代码或标识
    – dstCn表示目标图像通道数,其值为0时,则有src和code决定

该函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间,其中,RGB是指Red、Green和Blue,一副图像由这三个通道(channel)构成;Gray表示只有灰度值一个通道;HSV包含Hue(色调)、Saturation(饱和度)和Value(亮度)三个通道。在OpenCV中,常见的颜色空间转换标识包括CV_BGR2BGRA、CV_RGB2GRAY、CV_GRAY2RGB、CV_BGR2HSV、CV_BGR2XYZ、CV_BGR2HLS[3]。

下面是调用cvtColor()函数将图像进行灰度化处理的代码。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
import matplotlib.pyplot as plt#读取图片
src = cv2.imread('luo.png')#图像类型转换
result = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如图5-12所示,它将左边的彩色图像转换为右边的灰度图像,更多灰度转化算法将在后面的文章详细介绍。

同样,可以调用下列核心代码将彩色图像转换为HSV颜色空间,如图5-13所示。

  • grayImage = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)

下面代码对比了九种常见的颜色空间,包括BGR、RGB、GRAY、HSV、YCrCb、HLS、XYZ、LAB和YUV,并循环显示处理后的图像。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np
import matplotlib.pyplot as plt#读取原始图像
img_BGR = cv2.imread('luo.png')#BGR转换为RGB
img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)#灰度化处理
img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)#BGR转HSV
img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)#BGR转YCrCb
img_YCrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)#BGR转HLS
img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)#BGR转XYZ
img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)#BGR转LAB
img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)#BGR转YUV
img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)#调用matplotlib显示处理结果
titles = ['BGR', 'RGB', 'GRAY', 'HSV', 'YCrCb', 'HLS', 'XYZ', 'LAB', 'YUV']
images = [img_BGR, img_RGB, img_GRAY, img_HSV, img_YCrCb,img_HLS, img_XYZ, img_LAB, img_YUV]
for i in range(9):  plt.subplot(3, 3, i+1), plt.imshow(images[i], 'gray')  plt.title(titles[i])  plt.xticks([]),plt.yticks([])
plt.show()

其运行结果如图5-14所示:


六.总结

本章主要讲解Python和OpenCV的图像基础处理,从读取显示图像到读取修改像素,从创建、复制、保存图像到获取图像属性合通道,再详细讲解了图像算数与逻辑运算,包括图像加法、减法、与运算、或运算、异或运算、非运算,最后讲解了图像融合和获取图像ROI区域及图像类型转换。本章知识为后续的图像处理、图像识别、图像变换打下扎实基础。

最近寒假日更,为了感谢读者。同时感谢在求学路上的同行者,不负遇见,勿忘初心。图像处理系列主要包括三部分,分别是:

这周的留言感慨~

十二年CSDN的博客分享,如果要说分享最让我开心的是什么?不是传道,不是授业,也不是解惑,而是接下来这类事。这些年已经陆续鼓励了一些朋友当老师,而昨天得知这一位博友真的去到新疆南疆成为了一名小学老师,我很是感动,是真的感动,六年前我曾鼓励他如果想,就放弃高额工资的互联网大厂,去做自己想做的,没想到已经当了四年老师。又当爹又当妈,国语普及,文化教育,这里面的艰辛不是一两句道得清,除了佩服就是鼓励。
正如你说的一样,“一辈子总得做点有意义的事情,生命实在太短暂,一定要活得积极、正面”。或许,这也是我在CSDN分享博客的最大意义,再比如云南那位老友的留言,“农村的孩子下雨没有伞,只能拼命奔跑”,希望你以后也能成为一名教师,感恩有你们,感谢有你们。我也希望自己早日毕业回到家乡,花上三四十年做好两件事,一是认真教书,二是将少数民族文物抢救和文字语音保护做好,也鼓励更多人一起加入进来。自己虽然很菜吧,但还是有一些喜欢的事,尤其陪伴爱的人,挺好,爱你们喔。2022年继续加油,在CSDN分享更高质量的博客和专栏。

(By:娜璋之家 Eastmount 2022-01-26 夜于贵阳 https://blog.csdn.net/Eastmount )


参考文献:

  • [1]冈萨雷斯. 数字图像处理(第3版)[M]. 北京:电子工业出版社, 2013.
  • [2]毛星云, 冷雪飞. OpenCV3编程入门[M]. 北京:电子工业出版社, 2015.
  • [3]Eastmount. [Python图像处理] 五.图像融合、加法运算及图像类型转换[EB/OL]. (2018-09-03). https://blog.csdn.net/Eastmount/article/details/82347501.
  • [4]Eastmount. [Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理[EB/OL]. (2018-08-29). https://blog.csdn.net/Eastmount/article/details/82177300.

[Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制相关推荐

  1. [Python从零到壹] 四十一.图像处理基础篇之图像采样处理

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. [Python从零到壹] 四十.图像处理基础篇之图像量化处理

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. [Python从零到壹] 四十七.图像增强及运算篇之腐蚀和膨胀详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. [Python从零到壹] 五十七.图像增强及运算篇之图像锐化Roberts、Prewitt算子实现边缘检测

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. [Python从零到壹] 三十五.图像处理基础篇之OpenCV绘制各类几何图形

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

最新文章

  1. vue 改变domclass_基于 vue 开发甘特图组件的心路历程(兼设计分享)
  2. linux 脚本 查找替换,Shell脚本学习指南之查找与替换介绍
  3. JQuery多个异步操作后执行(resolve,promise,when,done)
  4. 创建yum存储库;文件目录下存RPM包,不挂载镜像,不使用外网yum源;
  5. 高斯滤镜模糊CSS3
  6. oracle9i查等待事件,Oracle9i中的一个特殊等待事件
  7. Linux基础(9)--延时与时间
  8. 设计师面试提前准备好这10个面试问题,助你面试成功
  9. 蓝桥杯 ALGO-100 算法训练 整除问题
  10. Javascript 也玩多线程
  11. 北京交通大学第六届新生程序设计竞赛题解
  12. Android之解决太大太多图片造成的oom
  13. mysql导入.sql文件中文乱码_mysql通过sql文件导入数据时出现乱码的解决办法
  14. 算法设计与分析:Jewels and Stones(Week 1)
  15. java dms项目流程_Xinco DMS
  16. VC6的fatal error C1010解决办法
  17. C语言99乘法表,求指点
  18. 华为2019实习生机试题1
  19. php fpm ondemand,AMH中PHP运行模式设置php-fpm为ondemand模式
  20. 科学家揭开宿醉原因:酒后身体缺水导致

热门文章

  1. /dev/mapper/VolGroup00-LogVol00 100% 如何处理
  2. Windows 7系统如何重装或安装IE8?
  3. Python基础知识点总结
  4. 模块之hashlib模块
  5. [Coderforces600E] Lomsat gelral
  6. NYOJ1071 - 不可以!
  7. Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)
  8. 【黑马程序员】————预处理指令1-宏定义
  9. 访客IP API接口
  10. HTML rel 属性