Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
ImageTk Paste
#6
Hi Yoriz!
I tried the above and subsequently had to add tk. before various objects such as
Canvas
and
Button
Still getting the same error:
Error:
/home/kieran/PycharmProjects/Kamera/venv/bin/python /home/kieran/PycharmProjects/Kamera/Kamera.py Exception in Tkinter callback Traceback (most recent call last): File "/usr/lib/python3.8/tkinter/__init__.py", line 1892, in __call__ return self.func(*args) File "/home/kieran/PycharmProjects/Kamera/Kamera.py", line 80, in snapshot self.photo.paste(self.overlay_img, (0, 0)) File "/home/kieran/PycharmProjects/Kamera/venv/lib/python3.8/site-packages/PIL/ImageTk.py", line 165, in paste im.load() AttributeError: 'PhotoImage' object has no attribute 'load' Process finished with exit code 0
Could this be a potential answer (which I don't fully understand): https://stackoverflow.com/questions/4013...il-imagetk

My current code:
import tkinter as tk
import cv2
from PIL import Image, ImageTk, ImageEnhance
import time
from tkinter import filedialog
import numpy as np


class App:
    def __init__(self, video_source=0):
        self.overlay_img = None
        self.appName = "Kamera"
        self.window = tk.Tk()
        self.window.title(self.appName)
        self.window.resizable(0, 0)
        # self.window.wm_iconbitmap("cam.ico")
        self.window['bg'] = 'black'
        self.video_source = video_source

        self.vid = MyVideoCapture(self.video_source)
        # self.label = Label(self.window, text=self.appName, font=15, bg='blue', fg='white').pack(side=TOP, fill=BOTH)
        self.canvas = tk.Canvas(self.window, width=self.vid.width, height=self.vid.height, bg='red')
        self.canvas.pack()

        self.btn_snapshot = tk.Button(self.window, text="Snapshot", width=5, command=self.snapshot)
        self.btn_snapshot.pack(side=tk.LEFT, padx=10)

        self.btn_overlay = tk.Button(self.window, text="Overlay", width=7, command=self.overlay)
        self.btn_overlay.pack(side=tk.LEFT, padx=10)

        self.btn_settings = tk.Button(self.window, text="Settings", width=5, command=self.settings)
        self.btn_settings.pack(side=tk.LEFT, padx=10)

        self.slide_value = 200
        self.update()
        self.window.mainloop()

    def settings(self):
        self.newWindow = Toplevel(self.window)
        self.newWindow.title("Settings")
        self.newWindow.geometry("400x400")
        self.btn_flip = Button(self.newWindow, text="Mirror Image", width=10, command=self.flip_img)
        self.btn_flip.pack(side=LEFT, padx=10)
            # self.brightness_lbl = Label(self.newWindow, text="Image Brightness")
            # self.brightness_lbl.pack(anchor=NW)
        #var = IntVar()
        self.brightness = Scale(
        self.newWindow, length=200, from_=0, to=255, orient=HORIZONTAL, label="Image Brightness",
                command=self.slide)
        self.brightness.set(200)
        self.brightness.pack(anchor=NW)

    def slide(self, var):
        self.slide_value = self.brightness.get()
        print(self.slide_value)

    def flip_img(self):
        self.vid.flipped = not self.vid.flipped

    def overlay(self):
        file = filedialog.askopenfile(
            mode='rb', defaultextension='.png',title="Choose Overlay Image", filetypes=[("PNG Files", '*.png')])
        if file:
            self.overlay_img = ImageTk.PhotoImage(file=file)

    def snapshot(self):
        isTrue, frame = self.vid.getFrame()

        if isTrue:
            filename = filedialog.asksaveasfilename(
                defaultextension='.jpg', title="Choose Filename", filetypes=[("JPEG Files", '*.jpg')])
            # image = "IMG-" + time.strftime("%H-%M-%S-%d-%m") + ".jpg"
            cv2.imwrite(filename, cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
            # msg = Label(self.window, text='Image Saved' + image, bg='black', fg='green').place(x=430, y=510)

        else:
            messagebox.showerror("paint says", "unable to save image ,\n something went wrong")

        if isTrue and self.overlay_img:
            self.photo.paste(self.overlay_img, (0, 0))
            self.stamped_img = ImageTk.PhotoImage(self.photo)
            filename = filedialog.asksaveasfilename(
            defaultextension='.jpg', title="Choose Filename", filetypes=[("JPEG Files", '*.jpg')])
            filename = self.stamped_img

    def update(self):
        isTrue, frame = self.vid.getFrame()
        frame = cv2.normalize(frame, frame, 0, self.slide_value, cv2.NORM_MINMAX)

        if isTrue:
            self.photo = ImageTk.PhotoImage(image=Image.fromarray(frame))
            #self.canvas.tag_lower(self.photo)
            self.canvas.create_image(0, 0, image=self.photo, anchor=tk.NW)

        if self.overlay_img:
            #self.canvas.tag_raise(self.overlay_img)
            self.canvas.create_image(0,0, image=self.overlay_img, anchor=tk.NW)
            #self.stamped_img = self.photo.paste(self.overlay_img)
        self.window.after(100, self.update)


class MyVideoCapture:
    def __init__(self, video_source=0):
        self.vid = cv2.VideoCapture(video_source)
        if not self.vid.isOpened():
            raise ValueError("Unable to open this camera \n select another video source", video_source)

        self.width = self.vid.get(cv2.CAP_PROP_FRAME_WIDTH)
        self.height = self.vid.get(cv2.CAP_PROP_FRAME_HEIGHT)

        self.flipped = True

    def getFrame(self):
        if self.vid.isOpened():
            isTrue, frame = self.vid.read()
            if isTrue and self.flipped:
                frame = cv2.flip(frame, 1)
            if isTrue:
                return (isTrue, cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
            else:
                return (isTrue, None)
        else:
            return (isTrue, None)

    def __del__(self):
        if self.vid.isOpened():
            self.vid.release()


if __name__ == "__main__":
    App()
Reply


Messages In This Thread
ImageTk Paste - by KDog - May-31-2021, 09:47 PM
RE: ImageTk Paste - by bowlofred - May-31-2021, 10:29 PM
RE: ImageTk Paste - by Yoriz - May-31-2021, 10:31 PM
RE: ImageTk Paste - by KDog - Jun-01-2021, 03:07 PM
RE: ImageTk Paste - by Yoriz - Jun-01-2021, 04:40 PM
RE: ImageTk Paste - by KDog - Jun-01-2021, 09:19 PM
RE: ImageTk Paste - by Yoriz - Jun-01-2021, 10:16 PM
RE: ImageTk Paste - by deanhystad - Jun-01-2021, 10:20 PM
RE: ImageTk Paste - by KDog - Jun-02-2021, 11:28 AM
RE: ImageTk Paste - by Yoriz - Jun-02-2021, 11:39 AM
RE: ImageTk Paste - by KDog - Jun-02-2021, 12:54 PM
RE: ImageTk Paste - by deanhystad - Jun-02-2021, 05:06 PM
RE: ImageTk Paste - by KDog - Jun-02-2021, 09:42 PM
RE: ImageTk Paste - by deanhystad - Jun-03-2021, 03:27 AM
RE: ImageTk Paste - by KDog - Jun-27-2021, 11:07 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  What script to paste folders thenewcoder 1 677 Nov-29-2023, 09:40 AM
Last Post: Pedroski55
  PIL ImageTk issue with MATPLOTLIB garynewport 0 1,799 Jan-17-2023, 11:32 AM
Last Post: garynewport
  Please help me [copy and paste file from src to dst] midomarc 2 1,027 Nov-24-2022, 10:13 PM
Last Post: midomarc
  Cut and Paste Oshadha 3 2,449 Jan-20-2021, 04:27 PM
Last Post: spaceraiders
  copy paste file and re-name it asheru93 1 2,384 May-24-2019, 10:43 AM
Last Post: heiner55

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020