Не удалось собрать библиотеки Python для детального сравнения изображений между двумя сдвинутыми изображениями, снятыми с помощью веб-камеры - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу получить подробное сравнение изображений, которые снимаются с помощью веб-камеры.

Я попробовал OpenCV и другие библиотеки Python для сравнения изображений, которые хорошо работают, когда я делаю любое цифровое изменение изображения, то есть изменения, сделанные на изображении с использованиемПК (с использованием Paint).

Но когда я физически изменяю изображение с помощью пера или любого другого объекта и записываю изображение с помощью веб-камеры, эта же библиотека не может обнаружить изменение, сделанное на изображении.

Факторы, которые приводят к такой проблеме:

  1. камера (я использую Logitech C310)
  2. Внешний шум (я снимаю изображение при свете светодиодной трубки)
  3. При изменении дизайна он может немного сдвинуться, что также отображается как разница.

Мой код:

from skimage.measure import compare_ssim
import argparse
import imutils
import cv2
import numpy as np

# load the two input images
imageA = cv2.imread('./t_0.png')
cv2.imwrite("./test/org.jpg", imageA)
# imageA = cv2.medianBlur(imageA,29)
imageB = cv2.imread('./t_1.png')
cv2.imwrite("./test/test.jpg", imageB)
# imageB = cv2.medianBlur(imageB,29)

# convert the images to grayscale
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)

##########################################################################################################

difference = cv2.subtract(grayA,grayB)    
result = not np.any(difference)
if result is True:
    print ("Pictures are the same")
else:
    cv2.imwrite("./test/open_cv_subtract.jpg", difference )
    print ("Pictures are different, the difference is stored.")

##########################################################################################################

diff = cv2.absdiff(grayA, grayB)
cv2.imwrite("./test/absdiff.png", diff)

##########################################################################################################

grayB=cv2.resize(grayB,(grayA.shape[1],grayA.shape[0]))
(score, diff) = compare_ssim(grayA, grayB, full=True)
diff = (diff * 255).astype("uint8")
print("SSIM: {}".format(score))

#########################################################################################################

thresh = cv2.threshold(diff, 25, 255,cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
#s = imutils.grab_contours(cnts)
count = 0
# loop over the contours
for c in cnts:
    # images differ
    count=count+1
    (x, y, w, h) = cv2.boundingRect(c)
    cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)
    cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)

##########################################################################################################

print (count)
cv2.imwrite("./test/original.jpg", imageA)
# cv2.imshow("Modified", imageB)
cv2.imwrite("./test/test_image.jpg", imageB)
cv2.imwrite("./test/compare_ssim.jpg", diff)
cv2.imwrite("./test/thresh.jpg", thresh)
cv2.waitKey(0)
  • Iне хочу использовать cv2.medianBlur, так как это снизит качество изображения.

  • нет необходимости изменять размер или обрезать изображение, поскольку все изображения, снятые с помощью веб-камеры, будут одинакового размера.

  • Среда всегда останется неизменнойдля захвата изображения только дизайн будет меняться с небольшими изменениями (например, маленькие точки над дизайном).

Изображение 1:

Original Image

Изображение 2:

Image to be compared

Полученное изображение:

marking the difference

Он смог найти тысячи различий:

displaying the difference

изображение absdiff (opencv):

absdiff image

ожидаемый выход:

expected output

Невозможно детализировать требуемую разницу,

Может ли кто-нибудь помочь мне с кодом или библиотекой Python для детального изображения, которое может физически обнаружить изменения, сделанные на изображении, для сравнения двух изображений, упомянутых выше.

Существует много вопросов, которые соответствуют моемутребования, но ни в коем случае не сравнивайте изображение, снятое с помощью веб-камеры, с требуемым результатом.

  1. Как сохранить постоянную среду для захвата изображения?
  2. Как выполнить детальное сравнение изображений(маленькая точечная точка)?
  3. какую камеру мне нужно использовать?
  4. Какой тип света мне нужно использовать для создания яркого и постоянного окружения?
  5. Есть лилюбой другой способ, любой другой язык программирования или библиотека, чтобы сделать это?

Помогите мне найти решение с помощью Python.

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