Как найти объект на фотографии?

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

Мой код:

import cv2
import math
import numpy as np


# load images
image1 = cv2.imread("image/test1.1.jpg")
image2 = cv2.imread("image/original.jpg")

#Normalized
#image1 = cv2.normalize(image1, image1, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX,     
dtype=cv2.CV_32F)
#image2 = cv2.normalize(image2, image2, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, 
dtype=cv2.CV_32F)



# compute difference
difference = cv2.subtract(image1, image2)

# color the mask red
Conv_hsv_Gray = cv2.cvtColor(difference, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(Conv_hsv_Gray, 0, 255,cv2.THRESH_BINARY_INV |cv2.THRESH_OTSU)
difference[mask != 255] = [0, 0, 255]

# add the red mask to the images to make the differences obvious
image1[mask != 255] = [0, 0, 255]
image2[mask != 255] = [0, 0, 255]

# store images
cv2.imwrite('df/diffOverImage1.png', image1)
cv2.imwrite('df/diff.png', difference)


im=cv2.imread('df/diff.png')
im_gray=cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
bw=cv2.threshold(im_gray, 19, 255, cv2.THRESH_BINARY)[1]
retval, labels, stats, centroids = cv2.connectedComponentsWithStats(bw, connectivity=8)


for i in range(45):
    x,y,w,h,s=stats[i+1,:]
    cv2.rectangle(im, (x, y), (x+w, y+h),(255, 255, 255), -1)
    cv2.imwrite('df/name.png', im)

font = cv2.FONT_HERSHEY_COMPLEX
img2 = cv2.imread('df/name.png', cv2.IMREAD_COLOR)

img = cv2.imread('df/name.png', cv2.IMREAD_GRAYSCALE)
_, threshold = cv2.threshold(img, 110, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(threshold, cv2.RETR_TREE,
                               cv2.CHAIN_APPROX_SIMPLE)


xx = []; yy = []
for cnt in contours:
    approx = cv2.approxPolyDP(cnt, 0.009 * cv2.arcLength(cnt, True), True)
    cv2.drawContours(img2, [approx], 0, (0, 0, 255), 5)
    n = approx.ravel()
    xc = (((n[0]+n[6])/2)-375)/10
    xx.append(xc)
    yc = (((n[1]+n[7])/2)-375)/10
    yy.append(yc)

На этом этапе программа находит 3 объекта, но не три выбранные точки разницы. Оригинал Оригинал

Изображение с 3 точками для нахождения программой Изображение с 3 точками для нахождения программой


Ответы (0 шт):