Я пытаюсь создать код, который загружает два изображения и использует клавиши для выравнивания двух изображений вручную, перемещая, вращая и масштабируя второе изображение относительно первого. Но этот код даже не показывает изображение. Кроме того, похоже, я не могу использовать методы клавиатуры 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
Как исправить этот код, чтобы он показывал изображение с помощью Python и CV? ⇐ Python
Программы на Python
1766996488
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79856626/how-to-fix-this-code-so-it-shows-the-image-with-python-and-cv[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия