Last active
November 19, 2023 13:47
-
-
Save rafaelcorsi/12b83f36d117177709197543cb1c11b1 to your computer and use it in GitHub Desktop.
MO445A - project - python image marker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
import os | |
import numpy as np | |
def draw_line(event, x, y, flags, param): | |
global drawing, last_point, color, line_type, points, img_display | |
# Check if CTRL key is pressed | |
ctrl_pressed = flags & cv2.EVENT_FLAG_CTRLKEY | |
if event == cv2.EVENT_LBUTTONDOWN: | |
drawing = True | |
color = ( | |
(0, 0, 255) if not ctrl_pressed else (0, 255, 0) | |
) # Red for normal left click, Green for left click + CTRL | |
line_type = 1 if not ctrl_pressed else 0 # 1 for Red, -1 for Green | |
last_point = (x, y) | |
points.append((x, y, line_type)) | |
elif event == cv2.EVENT_MOUSEMOVE: | |
if drawing: | |
cv2.line(img_display, last_point, (x, y), color, 5) | |
points.append((x, y, line_type)) # Save every point along the line | |
last_point = (x, y) | |
elif event == cv2.EVENT_LBUTTONUP: | |
drawing = False | |
cv2.line(img_display, last_point, (x, y), color, 5) | |
points.append((x, y, line_type)) # Also save the end point | |
def save_points(image_name, points, image_size, img_display): | |
base_name = os.path.basename(image_name) | |
base_name = os.path.splitext(base_name)[0] | |
# 408 and 341 are the | |
with open(f"markers/{base_name}-seeds.txt", "w") as file: | |
width, height = image_size | |
file.write( | |
f"{len(points)} {height} {width} \n" | |
) # Write image dimensions and number of points | |
for point in points: | |
file.write(f"{point[0]} {point[1]} -1 {point[2]}\n") | |
cv2.imwrite(f"markers/{base_name}-seeds.png", img_display) | |
# List all images in the folder | |
folder_path = "images" # Replace this with the path to your folder | |
image_files = [ | |
f for f in os.listdir(folder_path) if f.endswith((".png", ".jpg", ".jpeg")) | |
] | |
label_folder_path = "truelabels" | |
for image_file in image_files: | |
print(image_file) | |
img_path = os.path.join(folder_path, image_file) | |
original_img = cv2.imread(img_path) | |
label_img_path = os.path.join(label_folder_path, image_file) | |
label_img = cv2.imread(label_img_path) | |
if original_img is None: | |
continue # Skip if the file is not an image | |
img_display = cv2.addWeighted(original_img, 0.7, label_img, 0.3, 0) | |
cv2.namedWindow("Image") | |
cv2.setMouseCallback("Image", draw_line) | |
drawing = False | |
last_point = None | |
color = (0, 0, 0) | |
line_type = 0 | |
points = [] | |
while True: | |
cv2.imshow("Image", img_display) | |
key = cv2.waitKey(1) & 0xFF | |
if key == 27: # Press ESC to clear strokes and restart | |
img_display = cv2.addWeighted(original_img, 0.7, label_img, 0.3, 0) | |
points.clear() | |
continue | |
elif key == 13: # Press Enter to save and go to next image | |
save_points(img_path, points, original_img.shape[:2], img_display) | |
break | |
cv2.destroyAllWindows() |
Author
rafaelcorsi
commented
Nov 19, 2023
- Clique Esquerdo do Mouse: Desenha uma linha ou ponto vermelho na imagem.
- Clique Esquerdo do Mouse + Tecla CTRL: Desenha uma linha ou ponto verde na imagem.
- Tecla Enter: Salva as anotações em um arquivo .txt e avança para a próxima imagem.
- Tecla ESC: Apaga todas as anotações na imagem atual e permite recomeçar a anotação.
- Ctrl+C: Fecha o programa.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment