Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import cv2
- import numpy as np
- import os
- import time
- from watchdog.observers import Observer
- from watchdog.events import FileSystemEventHandler
- # Define the folder to monitor
- folder_to_monitor = 'C:\\Users\\david\\Desktop\\TESTING\\scans'
- # Define the output folder
- output_folder = 'C:\\Users\\david\\Desktop\\TESTING\\output'
- # Configure Settings
- # ThreshHold Settings
- thresholdValue = 205
- maxValue = 225
- # Canny Edge Detection
- upper = 50
- lower = 150
- # Create a class to handle file system events
- class ImageHandler(FileSystemEventHandler):
- def on_created(self, event):
- if event.is_directory:
- return
- if event.src_path.endswith(('.jpg', '.png', '.jpeg')):
- print(f"New image detected: {event.src_path}")
- process_image(event.src_path)
- # Initialize a counter for frame filenames
- frame_counter = 1
- # Function to process an image
- def process_image(image_path):
- # Declare frame_counter as global
- global frame_counter
- # Load the original image
- original_image = cv2.imread(image_path)
- # Rotate the original image 180 degrees
- rotated_image = cv2.rotate(original_image, cv2.ROTATE_180)
- # Convert to grayscale
- grey = cv2.cvtColor(rotated_image, cv2.COLOR_BGR2GRAY)
- # Use threshold to convert image to binary
- ret, thresh1 = cv2.threshold(grey, thresholdValue, maxValue, cv2.THRESH_BINARY) # 213
- # Apply morphological operations to remove specs or dirt/noise from the sprocket holes
- kernel = np.ones((8, 8), np.uint8)
- closing = cv2.morphologyEx(thresh1, cv2.MORPH_CLOSE, kernel, iterations=2)
- # Edge Detection for detecting contours
- edge = cv2.Canny(closing, upper, lower, apertureSize=7, L2gradient=True)
- # Finding Contours
- cnts, _ = cv2.findContours(edge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
- cnts = sorted(cnts, key=lambda x: cv2.boundingRect(x)[0])
- # Create a list to store the cropped ROIs
- cropped_rotated_rois = []
- for c in cnts:
- x, y, w, h = cv2.boundingRect(c)
- if h > 200 and w > 20:
- # Adjust the coordinates to create a larger bounding box
- x -= -50 # Move the left edge 10 pixels to the left
- y -= 10 # Move the top edge 10 pixels up
- w += 600 # Increase the width by 20 pixels
- h += 1050 # Increase the height by 20 pixels
- # Crop the ROI from the original image
- roi = rotated_image[y:y+h, x:x+w]
- # Rotate the cropped ROI (90 degrees clockwise)
- rotated_roi = cv2.rotate(roi, cv2.ROTATE_90_CLOCKWISE)
- # Flip the rotated ROI vertically
- flipped_roi = cv2.flip(rotated_roi, 1)
- # Append the rotated and flipped ROI to the list
- cropped_rotated_rois.append(flipped_roi)
- # Discard the last ROI if there are more than one
- if len(cropped_rotated_rois) > 1:
- cropped_rotated_rois.pop()
- # Save each cropped ROI to the output folder
- for idx, roi in enumerate(cropped_rotated_rois):
- output_filename = f"frame{frame_counter:06}.jpg"
- output_path = os.path.join(output_folder, output_filename)
- cv2.imwrite(output_path, roi)
- print(f"Processed image saved: {output_path}")
- # Increment the frame counter
- frame_counter += 1
- # Set up the watchdog observer
- event_handler = ImageHandler()
- observer = Observer()
- observer.schedule(event_handler, folder_to_monitor, recursive=False)
- observer.start()
- print(f"Monitoring folder: {folder_to_monitor}")
- try:
- while True:
- time.sleep(1)
- except KeyboardInterrupt:
- observer.stop()
- observer.join()
- # Call the process_image function for each image
- for image_filename in image_filenames:
- image_path = os.path.join(input_folder, image_filename)
- process_image(image_path)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement