Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 9
1

Применение фильтров к фото

04.06.2015, 00:07. Показов 6783. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как к данному коду прикрутить меню выбора накладки фильтров на фото в точности:
1) накладку серого
Python
1
2
3
4
5
6
7
8
if (mode == 0):
    for i in range(width):
        for j in range(height):
            a = pix[i, j][0]
            b = pix[i, j][1]
            c = pix[i, j][2]
            S = (a + b + c) // 3
            draw.point((i, j), (S, S, S))
2)Негатив
Python
1
2
3
4
5
6
7
if (mode == 2):
    for i in range(width):
        for j in range(height):
            a = pix[i, j][0]
            b = pix[i, j][1]
            c = pix[i, j][2]
            draw.point((i, j), (255 - a, 255 - b, 255 - c))
3)и добавление шумов
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (mode == 3):
    factor = int(input('factor:'))
    for i in range(width):
        for j in range(height):
            rand = random.randint(-factor, factor)
            a = pix[i, j][0] + rand
            b = pix[i, j][1] + rand
            c = pix[i, j][2] + rand
            if (a < 0):
                a = 0
            if (b < 0):
                b = 0
            if (c < 0):
                c = 0
            if (a > 255):
                a = 255
            if (b > 255):
                b = 255
            if (c > 255):
                c = 255
            draw.point((i, j), (a, b, c))
Ну и как сохранить потом эти изменения ?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from Tkinter import *
import Image, ImageTk, tkFileDialog, random, ImageDraw
from tkMessageBox import*
global img, imgobj
def show():
        global img, imgobj
                   
        filename = tkFileDialog.askopenfilename()
        if filename != ():  
                     
            src_img = Image.open(filename)
            img = ImageTk.PhotoImage(src_img)
            c.itemconfigure(imgobj, image=img, anchor="nw")
 
def callback():
    if askyesno('Verify', 'Really quit?'):
        tk.destroy()
    else:
        showinfo('No', 'Quit has been cancelled')
tk = Tk()
main_menu = Menu(tk)       
tk.config(menu=main_menu)  
file_menu = Menu(main_menu)  
main_menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="Open", command=show)
file_menu.add_separator()  
file_menu.add_command(label="Exit", command=callback)
c = Canvas(tk, width=300, height=300, bg="white")
imgobj = c.create_image(0, 0)
c.pack()
tk.mainloop()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 00:07
Ответы с готовыми решениями:

Применение фильтров ОС UNIX
Привет, хотел попросить помочь с задачей. Нужно найти в подкаталоге файл, содержащий наибольшее...

Применение фильтров на изображение
Здравствуйте. Пишу программу для работы с массивом пикселей на bitmap. На форме есть picturebox в...

Применение фильтров к graphics
Написал свою библиотек графического интерфейса с разделенным функционалом и представлением. Логика...

Применение фильтров к изображению
Ребят, подскажите пожалуйста, проблема в фильтров. Задача создать 2 списка с фильтрами...

Применение статических фильтров
Заранее прошу прощения, если подобная тема ранее создавалась. Вообщем нужно сделать скрипт, в...

7
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.06.2015, 00:33 2
Для начала оберни код в теги python и после этого уже поговорим.

P.S
и лучше не используй поганый tkinter и будет тебе счастье
0
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 9
04.06.2015, 01:36  [ТС] 3
задание именно на ткинтер программу писать. мне досталось это чудо (

Добавлено через 19 минут
Python
1
2
3
4
5
6
def savef():
    op=asksaveasfilename()
    letter = ImageTk.PhotoImage.get(1.0,END)
    f = open(sa,'w')
    f.insert(letter)
    f.close
при попытке сохранить изображение пишет
NameError: global name 'asksaveasfilename' is not defined

Добавлено через 10 минут
нашел что за проблема с сохранением, неправильно FileDialog был импортирован

Добавлено через 8 минут
всеравно не выходит сохранить, неправильно функцию пишу
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.06.2015, 16:30 4
EvoLwe, Вот, немного облагороженная версия кода, тебе сюда только добавить твои методы обработки ихображения надо и всё.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import tkinter
import tkinter.messagebox
import tkinter.filedialog
 
from PIL import Image, ImageTk
 
 
class MainWindow(tkinter.Tk):
    def __init__(self):
        super().__init__()
        self.create_menu()
 
        self.display = tkinter.Canvas(self, width=500, height=450, bg="white")
        self.display_img = self.display.create_image(0, 0)
        self.display.pack()
 
    def create_menu(self):
        menu = tkinter.Menu(self)
        file_menu = tkinter.Menu(menu)
        menu.add_cascade(label="File", menu=file_menu)
 
        file_menu.add_command(label="Open", command=self.show)
        file_menu.add_command(label="Save", command=self.save)
        file_menu.add_separator()
        file_menu.add_command(label="Exit", command=self.close)
 
        self.config(menu=menu)
 
    def show(self):
        filename = tkinter.filedialog.askopenfilename()
        if filename:
            self.image = Image.open(filename)
            self.photo = ImageTk.PhotoImage(self.image)
            self.display.itemconfigure(self.display_img, image=self.photo, anchor="nw")
 
    def close(self):
        if tkinter.messagebox.askyesno('Verify', 'Really quit?'):
            self.destroy()
        else:
            tkinter.messagebox.showinfo('No', 'Quit has been cancelled')
 
    def save(self):
        path = tkinter.filedialog.asksaveasfilename()
        if path:
            try:
                self.image.save(path)
            except KeyError:
                tkinter.messagebox.showerror('Ошибка', 'Не задано расширение')
 
window = MainWindow()
window.geometry('500x450')
window.mainloop()
2
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 9
05.06.2015, 01:40  [ТС] 5
alex925,а как указать, что я хочу именно на это изображение наложить фильтр ?

Добавлено через 2 часа 30 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import tkinter
import tkinter.messagebox
import tkinter.filedialog
 
from PIL import Image, ImageTk, ImageDraw
 
 
fileNameGlobal='globalimage'
 
class MainWindow(tkinter.Tk):
    def __init__(self):
        super().__init__()
        self.create_menu()
 
        self.display = tkinter.Canvas(self, width=2000, height=2000, bg="white")
        self.display_img = self.display.create_image(0, 0)
        self.display.pack()
 
    def create_menu(self):
        menu = tkinter.Menu(self)
        file_menu = tkinter.Menu(menu)
        edit_menu = tkinter.Menu(menu)
        menu.add_cascade(label="File", menu=file_menu)
        menu.add_cascade(label='Edit',menu=edit_menu)
        
        file_menu.add_command(label="Open", command=self.show)
        file_menu.add_command(label="Save", command=self.save)
        file_menu.add_separator()
        file_menu.add_command(label="Exit", command=self.close)
 
        edit_menu.add_command(label='grey',command=self.greyf)
        self.config(menu=menu)
 
    def show(self):
        filename = tkinter.filedialog.askopenfilename()
        fileNameGlobal=filename
        if filename:
            self.image = Image.open(filename)
            self.photo = ImageTk.PhotoImage(self.image)
            self.display.itemconfigure(self.display_img, image=self.photo, anchor="nw")
 
    def close(self):
        if tkinter.messagebox.askyesno('Verify', 'Really quit?'):
            self.destroy()
        else:
            tkinter.messagebox.showinfo('No', 'Quit has been cancelled')
 
    def save(self):
        path = tkinter.filedialog.asksaveasfilename()
        if path:
            try:
                self.image.save(path)
            except KeyError:
                tkinter.messagebox.showerror('Ошибка', 'Не задано расширение')
    def greyf(self):
       d=Image.open(fileNameGlobal)
       draw = ImageDraw.Draw(d)
       pix = d.load() 
       for i in range(pix.size[0]):
             for j in range(pix.size[1]):
                 a = pix[i, j][0]
                 b = pix[i, j][1]
                 c = pix[i, j][2]
                 S = (a + b + c) // 3
                 draw.point((i, j), (S, S, S))
       return d
window = MainWindow()
window.geometry('2000x2000')
window.mainloop()
я попробовал сделать как глобальную переменную изображение, всеравно не выходит наложить фильтр, просто ничего не происходит

Добавлено через 5 минут
теперь выдает ошибку
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "C:/Users/Vladislav/Desktop/test.py", line 56, in greyf
d=Image.open(fileNameGlobal)
File "C:\Python34\lib\site-packages\PIL\Image.py", line 2248, in open
fp = builtins.open(fp, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'imagecopy'
>>>
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.06.2015, 08:18 6
EvoLwe, Ты вызываешь методы не у тех объектов, что нужно + если хочешь чтобы картинка изменилась, то нужно загрузить изменения самому, за тебя это ни кто не сделает.
Вот примерно так, только нужно по идее какое нибудь уведомление прикрутить, когда идёт обработка фото + делать это в отдельном потоке:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import tkinter
import tkinter.messagebox
import tkinter.filedialog
 
from PIL import Image, ImageTk, ImageDraw
 
 
class MainWindow():
    def __init__(self, root):
        self.root = root
        self.create_menu()
 
        self.image = None
        self.photo = None
 
        self.display = tkinter.Canvas(root, width=500, height=450, bg="white")
        self.display_img = self.display.create_image(0, 0)
        self.display.pack()
 
    def create_menu(self):
        menu = tkinter.Menu(self.root)
 
        self.file_menu = tkinter.Menu(menu)
        menu.add_cascade(label="File", menu=self.file_menu)
        self.file_menu.add_command(label="Open", command=self.open)
        self.file_menu.add_command(label="Save", command=self.save, state='disabled')
        self.file_menu.add_separator()
        self.file_menu.add_command(label="Exit", command=self.close)
 
        self.edit_menu = tkinter.Menu(menu)
        menu.add_cascade(label="Edit", menu=self.edit_menu)
        self.edit_menu.add_command(label="Gray", command=self.grey, state='disabled')
 
        self.root.config(menu=menu)
 
    def open(self):
        filename = tkinter.filedialog.askopenfilename()
        if filename:
            self.image = Image.open(filename)
            self.photo = ImageTk.PhotoImage(self.image)
            self.display.itemconfigure(self.display_img, image=self.photo, anchor="nw")
 
            self.file_menu.entryconfig("Save", state='active')
            self.edit_menu.entryconfig("Gray", state='active')
 
    def close(self):
        if tkinter.messagebox.askyesno('Verify', 'Really quit?'):
            self.root.destroy()
        else:
            tkinter.messagebox.showinfo('No', 'Quit has been cancelled')
 
    def save(self):
        path = tkinter.filedialog.asksaveasfilename()
        if path:
            try:
                self.image.save(path)
            except KeyError:
                tkinter.messagebox.showerror('Ошибка', 'Не задано расширение')
 
    def grey(self):
        draw = ImageDraw.Draw(self.image)
        pix = self.image.load()
        for i in range(self.image.size[0]):
            for j in range(self.image.size[1]):
                average = (pix[i, j][0] + pix[i, j][1] + pix[i, j][2]) // 3
                draw.point((i, j), (average, average, average))
 
        self.photo = ImageTk.PhotoImage(self.image)
        self.display.itemconfigure(self.display_img, image=self.photo, anchor="nw")
 
 
root = tkinter.Tk()
window = MainWindow(root)
root.geometry('500x450')
root.mainloop()
я попробовал сделать как глобальную переменную
Забудь про использование глобальных переменных, это зло и точка!
К тому же какие нафиг глобальные переменные, когда код в ООП. Изображение хранится в атрибуте класса и следовательно получить к нему доступ не составляет проблем.

Кстати обрати внимание, что я использую объект изображения созданный при открытии файла, не нужно открывать изображение по 10 раз.
1
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 9
05.06.2015, 11:40  [ТС] 7
alex925, спасибо большое, научился у вас большему, чем за семестр у преподов по программированию
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.06.2015, 11:45 8
EvoLwe, Рад, что смог помочь
0
05.06.2015, 11:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2015, 11:45
Помогаю со студенческими работами здесь

Применение фильтров формы из VBA.
Добрый день. Пытаюсь разобраться с применением фильтров (через свойства подчиненной формы все...

Применение несколько фильтров оновременно
Вопрос наверное часто задаётся, я поискал но как то не нашёл ответа. Помогите написать код или...

Применение двух и больше фильтров сразу
Народ, возможно ли применение сразу нескольких фильтров ? К примеру, по году и месяцу? Выходит...

Применение фильтров к рисуемым примитивам GDI+
Есть код, рисующий с помощью Graphics графические примитивы, образующие конечный рисунок, например...

Как осуществить применение эффектов на фото?
Здравствуйте, уважаемые знатоки! Я сейчас защищаю проект и мне такое задание дали: При смене...

Реализовать программу применения графических фильтров к фотографии (5 фильтров)
Помогите выполнить задание С++ Реализовать программу применения графических фильтров к фотографии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru