반응형
원본 이미지 파일이 있을 때, 다른 특이점이 있는 사진을 비교군으로 해서 비교했을 때, 만약 comapre 부분이 1 이면 동일한 사진으로 사진이 저장되지 않고, 1 이하이면 다른 부분이 존재하므로 다른 부분에 대해서 파란색 직사각형으로 네모칸을 생성해서 표기하도록 한다.
pip install opencv-python
pip install scikit-image
두가지 패키지를 설치해준 후에 아래와 같은 코드를 작성하면 test3.jpg가 생성된다.
import cv2
from skimage.metrics import structural_similarity as compare_ssim
ORIGINAL_IMAGE_PATH = "/Users/stufit/Desktop/stufitfolder/개발용폴더/practice1/test2.jpg"
COMPARISON_IMAGE_PATH = "/Users/stufit/Desktop/stufitfolder/개발용폴더/practice1/test4.jpg"
RESULT_IMAGE_PATH = "/Users/stufit/Desktop/stufitfolder/개발용폴더/practice1/test3.jpg"
OUTPUT_COLOR = (255, 0, 0) # 파란색 테두리
def convert_to_gray(image):
return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
def save_comparison_result(original_image, comparison_image, result_path, result_image):
grayA = convert_to_gray(original_image)
grayB = convert_to_gray(comparison_image)
(score, diff) = compare_ssim(grayA, grayB, full=True)
print(f"Image similarity: {score}")
if score == 1.0:
print("같습니다.")
else:
print("틀린부분이 있습니다.")
diff = (diff * 255).astype("uint8")
thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
cv2.rectangle(result_image, (x, y), (x + w, y + h), OUTPUT_COLOR, 2)
cv2.imwrite(result_path, result_image)
print(f"Result saved as {result_path}")
original_image = cv2.imread(ORIGINAL_IMAGE_PATH)
comparison_image = cv2.imread(COMPARISON_IMAGE_PATH)
result_image = comparison_image.copy()
save_comparison_result(original_image, comparison_image, RESULT_IMAGE_PATH, result_image)
반응형