机械能是动能与势能的总和,这里的势能分为重力势能和弹性势能。我们把动能、重力势能和弹性势能统称为机械能。决定动能的是质量与速度;决定重力势能的是质量和高度;决定弹性势能的是劲度系数与形变量。机械能只是动能与势能的和。机械能是表示物体运动状态与高度的物理量。物体的动能和势能之间是可以转化的。在只有动能和势能相互转化的过程中,机械能的总量保持不变,即机械能是守恒的。
前言
又是一周见面时,在上期的文章中,我们学习了图像的霍夫变换,它其实是将当前空间的做坐标转换到另一空间的坐标中进行物体形状的检测,包括我们熟知的圆形,直线等等。相信大家看到标题已经知道了本篇文章将是opencv图像处理的最后一篇,因为在opencv图像处理中比较常用的算子我们已经介绍的差不多了,更多的是比较专业的图像处理,这里就不去叙述了,作为本专栏的最后一篇文章,我们不讲太深奥的,就从最开始的基础,回归一下显示图像的问题,我们从哪里出发,就从哪里回去。今天我们继续来学习图像的另一个知识--OpenCV VS Matplotlib显示图像。
一、简介
在之前的文章中,图像显示问题已将讲过很多次了,也用代码进行了多次实操,相信在大家的眼中,显示就是cv2.imshow()这么简单,的确如此,但,今天的内容将会告诉我们,图像的通道顺序将会影响图像的显示结果,为此我们用到了Matplotlib这个图像显示数学工具包来进行比较,一起来看看吧!
1.1 用 OpenCV显示图像
原始图像:
(从你的全世界路过----稻城亚丁)
原始颜色显示:
代码语言:javascript复制#coding:utf-8
# 导入图像显示所用到的包
import cv2
# 显示彩色图像 可认为默认为图像原始色彩
# 导入图片位置
img_path = './img.jpg'
# 读取图像
src_img = cv2.imread(img_path)
# 获取图像高度和宽度
img_info = src_img.shape
print("图像的高度为:{} 高度为:{} 通道数为:{}".format(img_info[0],img_info[1],img_info[2]))
# 显示图像
cv2.imshow("src_img",src_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
显示结果:
灰度图像显示:
代码语言:javascript复制#coding:utf-8
# 导入图像显示所用到的包
import cv2
# 显示彩色图像 可认为默认为图像原始色彩
# 导入图片位置
img_path = './img.jpg'
# 读取灰度图像
src_img = cv2.imread(img_path,0)
# 获取图像高度和宽度
img_info = src_img.shape
print("图像的高度为:{} 高度为:{}".format(img_info[0],img_info[1]))
# 显示图像
cv2.imshow("src_img",src_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
显示结果:
1.2 用 Matplotlib 显示图像
原始图像:
原始颜色显示:
还记得我们之前说过,OpenCV中的图像是以BGR的通道顺序存储的,然而今天所讲的Matplotlib是以RGB模式显示的,所以如果直接进行显示显示的话,将不会是我们想看到的结果,比如:
代码语言:javascript复制#coding:utf-8
# 导入图像显示所用到的包
import cv2
import matplotlib.pyplot as plt
# 显示彩色图像 可认为默认为图像原始色彩
# 导入图片位置
img_path = './img.jpg'
img = cv2.imread(img_path)
# 灰度图显示,cmap(color map)需要设定为gray
plt.imshow(img)
plt.show()
显示结果:
正确的显示:需要将图像通道进行转换为RGB
代码语言:javascript复制#coding:utf-8
# 导入图像显示所用到的包
import cv2
import matplotlib.pyplot as plt
# 显示彩色图像 可认为默认为图像原始色彩
# 导入图片位置
img_path = './img.jpg'
img = cv2.imread(img_path)
img_cvt = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 灰度图显示,cmap(color map)需要设定为gray
plt.imshow(img_cvt)
plt.show()
显示结果:
灰度图像显示:
代码语言:javascript复制#coding:utf-8
# 导入图像显示所用到的包
import cv2
import matplotlib.pyplot as plt
# 显示彩色图像 可认为默认为图像原始色彩
# 导入图片位置
img_path = './img.jpg'
img = cv2.imread(img_path,0)
# 灰度图显示,cmap(color map)需要设定为gray
plt.imshow(img, cmap='gray')
plt.show()
显示结果:
分析:仔细观看代码就会发现,opencv读取后的图像已经是灰度图了,但是在用plt显示的时候,还得在参数汇总加上gray,不然显示出来还是色彩空间不对。
例如:
代码语言:javascript复制#coding:utf-8
# 导入图像显示所用到的包
import cv2
import matplotlib.pyplot as plt
# 显示彩色图像 可认为默认为图像原始色彩
# 导入图片位置
img_path = './img.jpg'
img = cv2.imread(img_path) # 这里为直接读取原始图像
# 灰度图显示,cmap(color map)需要设定为gray
plt.imshow(img, cmap='gray')
plt.show()
显示结果:
结语
本篇文章是OpenCV专栏的最后一篇文章,熟悉的粉丝们应该知道,在这个栏目我们主要讲解了OpenCV的各种图像处理算子和代码,并没有涉及到太多的实际图像处理任务中,OpenCV专栏从基础出发,到基础截止,期待想学习的朋友们都能够掌握专栏的全部内容,至于后期是否会开出OpenCV实战类栏目,我们敬请期待!
从下一期文章起,我们将会回归到python的实战和提升篇文章,继续学习我们的python编程语言,达到尽可能熟练的程度,收拾旧山河,我们再出发……
编辑:玥怡居士|审核:小圈圈居士