簡體   English   中英

類型錯誤:預期的 Ptr<cv::umat> 對於參數 'm'</cv::umat>

[英]TypeError: Expected Ptr<cv::UMat> for argument 'm'

我使用以下代碼通過 Tkinter 中的 OpenCV 打開和保存圖像:

def select_image():
    fln = filedialog.askopenfilename(initialdir=os.getcwd(), title="Select image file", filetypes=(("JPG File","*.jpg"), ("PNG file", "*.png"), ("All Files", "*.*")))
    img = Image.open(fln)
    img.thumbnail((350,350))
    img = ImageTk.PhotoImage(img)
    lbl.configure(image=img)
    lbl.image = img
    img = np.array(img)

    cv2.imwrite(cv2.UMat("C:/Users/User/Desktop/Kurkuma/SEG" + ".jpg", img))

當我運行此代碼時,我收到以下錯誤:TypeError: Expected Ptr<cv::UMat> for argument 'm'

我對 OpenCV 和 Tkinter 不太熟悉,所以我不知道如何解決這個問題。 誰能告訴我有什么問題或我必須改變什么?

您不應在np.array(img)中使用ImageTk.PhotoImage的結果。 使用Image的結果:

def select_image():
    fln = filedialog.askopenfilename(initialdir=os.getcwd(), title="Select image file", filetypes=(("JPG File","*.jpg"), ("PNG file", "*.png"), ("All Files", "*.*")))
    if fln:
        img = Image.open(fln)
        img.thumbnail((350,350))

        tkimg = ImageTk.PhotoImage(img) # use another variable
        lbl.configure(image=tkimg)
        lbl.image = tkimg

        img = np.array(img) # use result from Image.open()
        img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) # convert RGB to BGR

        cv2.imwrite("C:/Users/User/Desktop/Kurkuma/SEG.jpg", img)

在轉換為 NumPy 數組之前,您需要使用ImageTk.getimage(img)
在另存為 JPEG 之前,您還需要將顏色格式從 RGBA 轉換為 BGR。

代碼示例:

img = ImageTk.PhotoImage(img)  # Type of img is PIL.ImageTk.PhotoImage

# https://stackoverflow.com/questions/58389742/how-to-convert-imagetk-to-image
img = np.array(ImageTk.getimage(img))  # Get the image, and then convert it to NumPy array

img_bgr = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)  # Convent from RGBA to BGR color space

cv2.imwrite("img.jpg", img_bgr)  # Save to JPEG.

更有效的解決方案是不使用 OpenCV,也不使用ImageTk.PhotoImage

您可以簡單地使用枕頭使用img.save保存圖像:

img.thumbnail((350,350))
img.save("img.jpg")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM