作者 || 不良帅
编辑 || 3D视觉开发者社区
✨如果觉得文章内容不错,别忘了三连支持下哦~
Matlab 启动起来比较耗费内存,对比两幅VGA尺寸的图像,占用内存接近1GB,给我不堪重负的台式机雪上加霜。
我为了减少内存消耗,写了一个python的脚本,使用matplotlib来对比两幅图像,成功实现了。
下面将代码分享给大家:
import sys
import os
try:
import numpy as np
import matplotlib.pyplot as plt
except:
os.system("pip install numpy matplotlib")
import numpy as np
import matplotlib.pyplot as plt
class CompareRawAxes3D:
def __init__(self):
# 定义两个路径
self.imageNew = r"E:\ProjectWorkSpace\HardWare\COM_TRANS_FOLDER\cloud2Depth_out_hw.raw"
self.imageOld = r"E:\ProjectWorkSpace\HardWare\COM_TRANS_FOLDER\cloud2Depth_out_hw - 副本.raw"
# self.imageOld = self.imageNew
self.dtype = r"uint16"
self.qvga = 0
self.rows = 640
self.cols = 480
def help(self):
printf("----------------------------------------------")
printf("使用方式1:python Compare.py")
printf("使用方式2:python Compare.py {path to image1.raw} {path to image2.raw}")
printf("----------------------------------------------")
def updateVar(self):
if len(sys.argv) > 1:
assert 3 <= len(sys.argv), "You must input 3 variables or more!!!"
self.imageNew = sys.argv[1]
self.imageOld = sys.argv[2]
if self.qvga:
self.rows = self.rows >> 1
self.cols = self.cols >> 1
def demo(self):
self.updateVar()
imageNew = np.fromfile(self.imageNew, dtype=self.dtype)
imageNew = imageNew.reshape(self.rows, self.cols)
imageOld = np.fromfile(self.imageOld, dtype=self.dtype)
imageOld = imageOld.reshape(self.rows, self.cols)
imageDiff = abs(imageOld - imageNew)
errDiffMax = imageDiff.max()
error_g01 = sum(sum(imageDiff > 1))
error_g05 = sum(sum(imageDiff > 5))
error_g10 = sum(sum(imageDiff > 10))
error_g50 = sum(sum(imageDiff > 50))
print(r"errDiffMax = ", errDiffMax)
print(r"error_g01 = ", error_g01)
print(r"error_g05 = ", error_g05)
print(r"error_g10 = ", error_g10)
print(r"error_g50 = ", error_g50)
# create points
x = np.linspace(0, self.cols - 1, self.cols)
y = np.linspace(0, self.rows - 1, self.rows)
# create grid
X, Y = np.meshgrid(x, y)
# plot
"""
fig = plt.figure() # 定义新的三维坐标轴
ax3 = plt.axes(projection='3d')
ax3.plot_surface(X, Y, imageNew, cmap='rainbow')
# 更加精细的图
# ax3.plot_surface(X, Y, imageNew, rstride = 2, cstride = 2,cmap='rainbow')
plt.title("imageNew")
plt.figure()
ax3 = plt.axes(projection='3d')
ax3.plot_surface(X, Y, imageOld, cmap='rainbow')
plt.title("imageOld")
"""
plt.figure()
ax3 = plt.axes(projection='3d')
ax3.plot_surface(X, Y, imageDiff, cmap='rainbow')
plt.title("imageDiff")
plt.show()
if __name__ == "__main__":
test = CompareRawAxes3D()
test.demo()
运行后发现,这个python+matplotlib的代码有以下两个优点:
1、内存消耗少,500MB左右即可满足需求
2、不需要等待Matlab启动,初始化,只需要在cmd里面执行即可
而我最主要的需求——减少内存消耗,也已经满足了。
大家可以一起来试试!
版权声明:本文为奥比中光3D视觉开发者社区特约作者授权原创发布,未经授权不得转载,本文仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文
3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。
点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~
也可移步微信关注官方公众号:3D视觉开发者社区 ,获取更多干货知识哦~