matlab.engine.EngineError: 无法连接到 MATLAB 会话 ‘MATLAB_13144‘。

matlab.engine.EngineError: 无法连接到 MATLAB 会话 'MATLAB_13144'。

         我是在python中调用matlab.engine出现这个bug,这段代码的主函数如下:

if __name__ == '__main__':
    img1_dir = "D:\projectworkspace\\pythonworkspace\\SRdeep_prior\\final results\\book\\Original.png"
    img2_dir = "D:\projectworkspace\\pythonworkspace\\SRdeep_prior\\final results\\book\\SRCNN_Reconstruction.png"
    img1 = np.array(Image.open(img1_dir))
    img2 = np.array(Image.open(img2_dir))
    CI = ComputeIndex(img1, img2, img1_dir, img2_dir)
    print("PSNR:%5f(dB); SSIM:%0.8f; real1_NIQE:%0.5f; bicubic1_NIQE:%0.5f" % (CI.psnr(), CI.ssim(), CI.niqe()[0],
                                                                               CI.niqe()[1]))

        在调用CI.niqe()时,由于NIQE的计算是由matlab脚本计算,故我用到了matlab.engine。niqe的定义如下:

    def niqe(self):
        if self.img1_dir is None or self.img2_dir is None:
            assert False, " Don't have image directory, please check input parameters."
        else:
            eng = matlab.engine.connect_matlab()
            # print('matlab process name: ', matlab.engine.find_matlab())
            eng.addpath('perceptualmetric')
            img_dir = [self.img1_dir, self.img2_dir]
            niqe_list = []
            for img in img_dir:
                niqe_list.append(eng.calc_NIQE(img, 4))
            return niqe_list

        出现这个问题的原因在于,在CI.niqe[0]时已经连接了matlab的会话(session)。如果再在CI.niqe()[1]中去调用niqe函数就会导致前一个会话未终止,又开始调用这个会话。所以出现无法连接的错误。(在一个matlab会话未结束时有又想开始新会话)

        解决方法就是在print之前只调用一次niqe函数,让它的列表直接返回出来即可。即不要在print里调用两次CI.niqe()。

if __name__ == '__main__':
    img1_dir = "D:\projectworkspace\\pythonworkspace\\SRdeep_prior\\final results\\book\\Original.png"
    img2_dir = "D:\projectworkspace\\pythonworkspace\\SRdeep_prior\\final results\\book\\SRCNN_Reconstruction.png"
    img1 = np.array(Image.open(img1_dir))
    img2 = np.array(Image.open(img2_dir))
    CI = ComputeIndex(img1, img2, img1_dir, img2_dir)
    niqe = CI.niqe()
    print("PSNR:%5f(dB); SSIM:%0.8f; real1_NIQE:%0.5f; bicubic1_NIQE:%0.5f" % (CI.psnr(), CI.ssim(), niqe[0],
                                                                               niqe[1]))

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值