栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

代码分享丨使用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:ProjectWorkSpaceHardWareCOM_TRANS_FOLDERcloud2Depth_out_hw.raw"
        self.imageOld = r"E:ProjectWorkSpaceHardWareCOM_TRANS_FOLDERcloud2Depth_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视觉开发者社区 ,获取更多干货知识哦~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号