0

这是我创建卡通图像的函数代码。我一直在尝试纠正这个问题,但根据 Stack 和谷歌的说法,没有找到解决方案。可能是因为图像没有实际加载,这会导致进一步的问题。

导入opencv。

import cv2

#function for taking an image

def make_cartoon(file_path):
    img = cv2.imread(file_path)

    # Get the edges
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    gray = cv2.medianBlur(gray, 5)
    edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 51, 51)

    # To blur the coloured version of image
    color = cv2.bilateralFilter(img, 51, 300, 300)

    # Creating the Cartoon
    cartoon = cv2.bitwise_and(color, color, mask=edges)

    return cartoon

该文件包含实际代码和要执行的所有函数。

#编写代码

import tkinter as tk
from tkinter import *
from cartoonizer import *
from tkinter import filedialog
from PIL import ImageTk, Image
import cv2

top = tk.Tk()
top.geometry('1000x600')
top.title('Cartoonifier')
top.iconbitmap("D:\so_cket\Courses\cartoonifier\Lib\pics\p.png")
top.config(background="white")


def save_cartoon(file_path, cartoon_img):
    where = filedialog.asksaveasfilename(filetypes=(('JPEG Files', '*.jpg'), ('PNG Files', '*.png'),
                                            ("All Files", "*.*")), defaultextension=file_path[-4:])
    cartoon_img.save(where)


def show_save_button(file_path, cartoon_img):
    save_b = Button(top, text="Save Cartoon", command=lambda: save_cartoon(file_path, cartoon_img), padx=10, pady=5)
    save_b.place(relx=0.69, rely=0.86)


def convert(file_path):
    cartoon = make_cartoon(file_path)
    cartoon = cv2.cvtColor(cartoon, cv2.COLOR_BGR2RGB)
    cartoon_img = Image.fromarray(cartoon)
    cartoon_img.thumbnail(((top.winfo_width()/1.8), (top.winfo_height()/1.8)))
    im = ImageTk.PhotoImage(cartoon_img)
    label = Label(top, image=im)
    label.image = im
    label.pack(side="right", expand='yes')
    show_save_button(file_path, cartoon_img)


def show_convert_button(file_path):
    convert_b = Button(top, text="Cartoonify", command=lambda: convert(file_path), padx=10, pady=5)
    convert_b.place(relx=0.79, rely=0.46)


def upload_image():
    file_path = filedialog.askopenfilename()
    uploaded = Image.open(file_path)
    uploaded.thumbnail(((top.winfo_width()/2.25), (top.winfo_height()/2.25)))
    im = ImageTk.PhotoImage(uploaded)
    label = Label(top, image=im)
    label.image = im
    label.pack(side="left", expand='yes')
    show_convert_button(file_path)


upload = Button(top, text="Upload an Image", command=upload_image, pady=5)
upload.config(background="#adadee", foreground="white", font=("arial", 10, "bold"))
upload.place(relx=0.44, rely=0.86)

top.mainloop()

但是我收到了这个错误,我真的很想知道如何解决这个问题。

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\so_cket\Anaconda\pyth\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "D:/so_cket/Courses/cartoonifier/Lib/cartoonifier.py", line 39, in <lambda>
    convert_b = Button(top, text="Cartoonify", command=lambda: convert(file_path), padx=10, pady=5)
  File "D:/so_cket/Courses/cartoonifier/Lib/cartoonifier.py", line 27, in convert
    cartoon = make_cartoon(file_path)
  File "D:\so_cket\Courses\cartoonifier\Lib\cartoonizer.py", line 11, in make_cartoon
    edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 9)
cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-vi271kac\opencv\modules\imgproc\src\thresh.cpp:1676: error: (-215:Assertion failed) src.type() == CV_8UC1 in function 'cv::adaptiveThreshold'
4

0 回答 0