我正在比较两个图像并使用 compare_ssim 找到差异,在这种情况下,我得到了差异的轮廓,我需要通过在其周围绘制矩形来突出显示,但我面临的问题是某些矩形相互重叠我想要删除那些重叠。给定的是我的代码和图像。
import os
import csv
from datetime import datetime
from datetime import date
from datetime import timedelta
import tldextract
import time
import requests
import json
from urllib.parse import urlparse
import tldextract
import os
from PIL import Image
from PIL import ImageChops
from PIL import ImageDraw
from skimage.measure import compare_ssim
import numpy as np
import argparse
import imutils
import cv2
import urllib.request as req
import math
def is_contour_bad(c):
# approximate the contour
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
# the contour is 'bad' if it is not a rectangle
return not len(approx) == 4
initial_view = "first_image.jpg"
secondary_view = "seconda_image.jpg"
initial = cv2.imread(initial_view)
secondary = cv2.imread(secondary_view)
size_of_initial_image = heighta, widtha = initial.shape[:2]
size_of_secondary_image = heightb, widthb = secondary.shape[:2]
if size_of_initial_image == size_of_secondary_image:
grayA = cv2.cvtColor(initial, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(secondary, cv2.COLOR_BGR2GRAY)
(score, diff) = compare_ssim(grayA, grayB, full=True)
diff = (diff * 255).astype("uint8")
if score == 1.0:
print('images are identical')
else:
thresh = cv2.threshold(diff, 0, 255,
cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]
# output = secondary.copy()
# alpha = 0.3
threshold_area = 1000
for c in cnts:
if is_contour_bad(c):
pass
area = cv2.contourArea(c)
if area > threshold_area:
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(secondary, (x, y), (x + w , y + h), (0,255,255), 2)
慕田峪9158850
相关分类