代码分享丨使用python和matplotlib来对比两幅图像

作者 || 不良帅
编辑 || 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 >> 1def 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视觉开发者社区 ,获取更多干货知识哦~

你可能感兴趣的:(开发者,python,计算机视觉,机器学习,代码,经验分享)