Как исправить этот код, чтобы он показывал изображение с помощью Python и CV?Python

Программы на Python
Ответить
Anonymous
 Как исправить этот код, чтобы он показывал изображение с помощью Python и CV?

Сообщение Anonymous »

Я пытаюсь создать код, который загружает два изображения и использует клавиши для выравнивания двух изображений вручную, перемещая, вращая и масштабируя второе изображение относительно первого. Но этот код даже не показывает изображение. Кроме того, похоже, я не могу использовать методы клавиатуры cv2, поэтому я использую kbhit. Кроме того, я не могу использовать pyside6, чтобы попробовать какой-то другой пакет.
Однако, вот код, может быть, его можно просто «исправить»?
import cv2
import numpy as np
import kbhit
import time

# ---------------- CONFIG ----------------
BASE_IMAGE_PATH = "Input/RIMG_20250222_074457.jpg"
OVERLAY_IMAGE_PATH = "Input/RIMG_20250308_072815.jpg"
OUTPUT_IMAGE_PATH = "overlay_aligned.png"

MOVE_STEP = 5 # pixels per key press
ROTATE_STEP = 1.0 # degrees per key press
ZOOM_STEP = 0.02 # scale per key press
# ---------------------------------------

keyboard = kbhit.KBHit()

def transform_overlay(img, tx, ty, angle, scale):
print("rendering ...")
h, w = img.shape[:2]

# Center of the image
center = (w // 2, h // 2)

# Rotation + scaling
M = cv2.getRotationMatrix2D(center, angle, scale)

# Translation
M[0, 2] += tx
M[1, 2] += ty

transformed = cv2.warpAffine(
img,
M,
(w, h),
flags=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_CONSTANT,
borderValue=(0, 0, 0)
)

return transformed, M

def main():
base = cv2.imread(BASE_IMAGE_PATH)
overlay = cv2.imread(OVERLAY_IMAGE_PATH)

if base is None or overlay is None:
raise FileNotFoundError("Could not load images")

# Resize overlay to match base if needed
overlay = cv2.resize(overlay, (base.shape[1], base.shape[0]))

tx, ty = 0, 0
angle = 0.0
scale = 1.0

print("Controls:")
print("Arrow keys: move overlay")
print("A / D: rotate")
print("W / S: zoom in / out")
print("R: reset")
print("SPACE: save aligned overlay")
print("ESC: exit")

while True:
transformed, M = transform_overlay(overlay, tx, ty, angle, scale)

# Blend images for visualization
blended = cv2.addWeighted(base, 0.6, transformed, 0.4, 0)

cv2.namedWindow("Alignment Tool", cv2.WINDOW_NORMAL)
cv2.imshow("Alignment Tool", blended)

while not keyboard.kbhit():
time.sleep(0.1)
pass

if keyboard.kbhit():
key = ord(keyboard.getch())

print(key)

if key == 27: # ESC
break

elif key == ord('r'):
tx, ty, angle, scale = 0, 0, 0.0, 1.0

elif key == ord('a'):
angle -= ROTATE_STEP
elif key == ord('d'):
angle += ROTATE_STEP

elif key == ord('w'):
scale += ZOOM_STEP
elif key == ord('s'):
scale = max(0.1, scale - ZOOM_STEP)

elif key == 32: # SPACE
cv2.imwrite(OUTPUT_IMAGE_PATH, transformed)
print(f"Saved aligned overlay to {OUTPUT_IMAGE_PATH}")

# Arrow keys (OpenCV key codes)
elif key == ord('j'): # left
tx -= MOVE_STEP
elif key == ord('k'): # right
tx += MOVE_STEP
elif key == ord('i'): # up
ty -= MOVE_STEP
elif key == ord('m'): # down
ty += MOVE_STEP

cv2.destroyAllWindows()

if __name__ == "__main__":
main()


Подробнее здесь: https://stackoverflow.com/questions/798 ... hon-and-cv
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»