如何获取输入参数并将其转换为字符串(Python)

2024-09-27 04:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的代码中,我读取一个图像,然后用matplot打印它。在myplotColor函数中,我想创建一个plt.title(图像),其中我传递的图像(lena或link)将显示为标题
因此,如果我做plotColor(lena),我会得到一个lena的plt,并以lena为标题
这段代码正确显示了我的所有图片,我知道我可以传递第二个文本字符串参数并使用它,但我想知道是否有办法通过只传递一个参数来实现这一点

def plotColor(image):
    plt.figure()
    plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    plt.title("image")

lena = cv2.imread("lena.png")
link = cv2.imread("link.png")

plotColor(lena)
plotColor(link)

谢谢

编辑
我在创建的后续函数中调用该路径时遇到问题。(这是基于以下建议的解决方案)

def grayScale(image):
    output = cv2.cvtColor(image.image, cv2.COLOR_BGR2GRAY)
    return output
def plotGrayscale(image):
    plt.figure()
    plt.imshow(image.image, cmap='gray')
#     plt.title(image.path)

尝试时无法添加image.path:plotGrayscale(grayScale(lena)),因此无法在输出图像上创建标题


Tags: 函数代码图像image标题参数titledef
2条回答

提出的解决方案不是一种实现你想要的东西的可靠方法;它依赖于lenalink是全局定义的这一事实。例如,如果它们移动到另一个函数中,那么您将无法eval()这些字符串。此外,仅仅为了使字符串可用,并不需要将字符串作为代码执行。如果要传递一个包含多个数据/信息的对象,只需创建一个类来保存这两个内容,并传递该类的实例即可。下面是一个简单的例子:

class PathedImage:
    def __init__(self, path):
        self.image = cv2.imread(path)
        self.path = path

def plotColor(image):
    plt.figure()
    plt.imshow(cv2.cvtColor(image.image, cv2.COLOR_BGR2RGB))
    plt.title(image.path)

lena = PathedImage("lena.png")
link = PathedImage("link.png")

plotColor(lena)
plotColor(link)

如果你愿意,你可以在这里得到更多的幻想;例如,PathedImage可以对numpy数组进行子类化,使其行为与numpy数组完全相同,但添加了namepath属性

实现所需功能的一种简单方法是将文件名作为参数传递给函数,并在函数内部打开图像文件。这样,您就可以使用文件名字符串来清理它并将其设置为图像标题。您还可以添加一个参数以具有单个打印功能,并选择是要打印彩色图像还是灰度图像:

import os
def plotImage(file, grayscale=False):
    image = cv2.imread(file)
    filename = os.path.basename(file).split('.')[0]
    plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2GRAY if grayscale else cv2.COLOR_BGR2RGB))
    plt.title(filename)

plotImage("lena.png") # plot color image
plotImage("link.png", grayscale=True) # plot grayscale image

相关问题 更多 >

    热门问题