这是我创建卡通图像的函数代码。我一直在尝试纠正这个问题,但根据 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'