Нахождение разности значений пикселей в 2 изображениях, а затем создание новых изображений на основе разницы - PullRequest
1 голос
/ 18 июня 2019

Я хочу создать программу, которая будет снимать одну и ту же область в 2 разных раза, а затем сравнивать изображения, а затем создавать совершенно новое изображение, которое будет иметь разницу между двумя изображениями (что изменилось).Я использую значения RGB и смотрю, отличаются ли они более чем на 90%, а затем я хочу добавить эти пиксели в новую матрицу, которая будет отображена.Я довольно плохо знаком с Raspberry Pi и python, поэтому столкнулся с ошибкой, и я не понимаю, почему она дает мне эту ошибку.

Я пытался использовать PIL и Numpy, но оба метода выдают ошибки, которые яне могу исправить

ЭТО НЕ ВЕСЬ КОД, НО ЭТО ФУНКЦИЯ, КОТОРАЯ ДАЕТ МНЕ ОШИБКА:

from PIL import Image
import numpy as np
import picamera
import time
import RPi.GPIO 
from guizero import ...

def processimage():
    before = Image.open('before.jpg')
    after = Image.open('after.jpg')

    beforeRGB = np.array(before)
    afterRGB = np.array(after)

    outputRGB = Image.new('RGB', (800,480))

    x=0
    y=0
    for x in range(800):
        for y in range(480):
            if(((beforeRGB[x,y,0])/afterRGB[x,y,0])<0.9):
                outputRGB[x,y,0] = afterRGB[x,y,0]
            else:
                output[x,y,0] = 255

            if(((beforeRGB[x,y,1])/afterRGB[x,y,1])<0.9):
                outputRGB[x,y,1] = afterRGB[x,y,1]
            else:
                output[x,y,1] = 255

            if(((beforeRGB[x,y,2])/afterRGB[x,y,2])<0.9):
                outputRGB[x,y,2] = afterRGB[x,y,2]
            else:
                output[x,y,2] = 255


            y=y+1
         x=x+1

    Image.fromarray(outputRGB).save('output.jpg')

ЭТО ОШИБКА, КОТОРУЮ Я ПОЛУЧАЮ

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1562, in __call__
    return self.func(*args)
  File "/usr/local/lib/python3.5/dist-packages/guizero/PushButton.py", 
line 146, in _command_callback
    self._command()
  File "/home/pi/ButtonTest/GUI_interface.py", line 70, in mode
    lifetime(key)
  File "/home/pi/ButtonTest/GUI_interface.py", line 158, in lifetime
    processimage()
  File "/home/pi/ButtonTest/GUI_interface.py", line 115, in processimage
    outputRGB[x,y,0] = afterRGB(x,y,0)
TypeError: 'numpy.ndarray' object is not callable

1 Ответ

0 голосов
/ 18 июня 2019

1) Сообщение об ошибке не соответствует коду.Сообщение об ошибке относится к другой версии кода, где (), где используется случайно вместо [], см. Последнюю строку кода сообщения об ошибке.

2) При использовании итераций по отдельным пикселям очень медленноPython.Пожалуйста, прочитайте пару учебных пособий по обработке изображений, чтобы получить представление о векторизации и вещании.

Например, приведенный выше код можно сократить до чего-то вроде:

output = np.where(beforeRGB/afterRGB < 0.9, afterRGB, 255]

3) for x in range() уже перебирает все значения х в диапазоне.Нет необходимости увеличивать x или y в конце цикла.

4) Формула, выбранная для разности изображений, дает деление на ноль для пикселей, где хотя бы один из каналов равен 0. Проведите некоторое исследованиеи выберите лучший показатель для различий в изображениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...