Python 类返回

标签 python shell

我正在自学 Python,并且想要一个辅助类来从 shell 脚本或其他类加载图像。

这是我到目前为止所拥有的:

import cv2 as cv
import os, sys


class LoadImage:

    def __init__(self, inputfile, outputfile=None):
        self.inputfile = inputfile
        self.outputfile = outputfile
        self.img = None

        if os.path.isfile(self.inputfile):
            self.load()
        else:
            print "Path provided is not to a file"
            sys.exit(1)

    def load(self):
        self.img = cv.imread(self.inputfile)

        if self.img is not None:
            return self.img
        else:
             print "Error with loading image"
            sys.exit(1)

我的问题是如何使用它。假设我将其复制到/home/jason/python_project ,其目录结构如下

python_project
    |--- LoadImage.py
    |
    |--- images
           |
           |--- test1.jpg
           |--- test2.jpg

我想要发生的是在使用有效路径名实例化 LoadImage 时,type(img) 返回numpy.ndarray

假设我在 python_project 中打开一个 ipython shell 并输入

from LoadImage import LoadImage
img = LoadImage("images/test1.jpg")

这里,img 返回

In [21]: img
Out[21]: <LoadImage.LoadImage instance

但是img.img返回在cv.imread()上创建的numpy ndarray的矩阵数组。

如何修改此设置以便可以从 shell 执行此操作:

import LoadImage

img = LoadImage("images/test1.jpg")
img.shape() #returns a 3 item tuple
type(img) # returns numpy.ndarray

最佳答案

当您调用LoadImage("images/test1.jpg")时,它会调用“构造函数”,并且它将始终返回该类的实例。您应该做的是在创建实例后调用load函数,并更改代码,使其不在init中调用load。

更新您的代码以反射(reflect)上述更改;

import cv2 as cv
import os, sys


class LoadImage:

    def __init__(self, inputfile, outputfile=None):
        self.inputfile = inputfile
        self.outputfile = outputfile
        self.img = None

    def load(self):
        if not os.path.isfile(self.inputfile):
            print "Path provided is not to a file"
            sys.exit(1)

        self.img = cv.imread(self.inputfile)

        if self.img is not None:
            return self.img
        else:
             print "Error with loading image"
            sys.exit(1)

你会这样调用它;

导入LoadImage

img = LoadImage("images/test1.jpg").load()
img.shape()

或者,如果您实际上不需要这里的类,您可以编写一个函数来为您完成所有这些工作;

import cv2 as cv
import os, sys

def load_image(input_file):
    if not os.path.isfile(self.inputfile):
        print "Path provided is not to a file"
        sys.exit(1)
    img = cv.imread(self.inputfile)
    if self.img:
        return self.img
    else:
         print "Error with loading image"
        sys.exit(1)

关于Python 类返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22272815/

相关文章:

python - 为什么 astype timedelta64 不能在 ndarray 上工作?

python - 有效过滤掉两个二维 numpy 数组之间的匹配行

linux - 如何执行jar文件中的.sh文件

linux - 如何让 nohup + tail 不向回车符添加换行符?

python - 检查模型输入 : expected conv1d_1_input to have shape (None, 44​​1, 216) 时出错,但得到形状为 (1, 441, 216) 的数组

python - 从隐藏目录(包)导入模块

linux - 如何从 shell 中的三个中随机选择第一台机器?

PHP - 如何让 Shell 错误回显到屏幕上

linux - 如何使用 printf 将部分输入传递给 shell 脚本以自动运行它?

python - 从另一个模型获取公司列表以及员 worker 数