我一直在尝试使用这个 Python 程序将图像文件转换为卡通,我正在使用 opencv 和 tkinter 将其转换为 GUI

问题描述

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

导入 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,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),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,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,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'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)