Ошибка при расчете координаты Bbox при загрузке фонового изображенияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка при расчете координаты Bbox при загрузке фонового изображения

Сообщение Anonymous »

Я пишу сценарий, который загружает изображение, и мы можем нарисовать на него Bboxes, нажав клавишу B, а затем перетаскивая мышь.
Однако по какой -то причине расчет координат Bboxes (особенно в координате Y) идет неправильно. < /p>
мне удалось получить минимальный воспроизводимый код. Вот это < /p>

Код: Выделить всё

import sys
import os
from PyQt6.QtWidgets import (
QApplication,
QGraphicsView,
QGraphicsScene,
QGraphicsRectItem,
QPushButton,
QVBoxLayout,
QWidget,
QHBoxLayout,
QCheckBox,
QFileDialog,
)
from PyQt6.QtGui import QPen, QPixmap, QPainter, QColor
from PyQt6.QtCore import Qt, QEvent, QRectF, QPointF

class RectangleItem(QGraphicsRectItem):
def __init__(self, rect, parent=None):
super().__init__(rect, parent)
self.setPen(QPen(Qt.GlobalColor.green, 1, Qt.PenStyle.DashLine))
self.setFlags(
QGraphicsRectItem.GraphicsItemFlag.ItemIsMovable
| QGraphicsRectItem.GraphicsItemFlag.ItemIsSelectable
| QGraphicsRectItem.GraphicsItemFlag.ItemIsFocusable
)

class StickerApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Bounding Box Debugger")
self.resize(800, 600)

self.view = QGraphicsView()
self.scene = QGraphicsScene()
self.view.setScene(self.scene)
self.view.viewport().installEventFilter(self)

self.save_bboxes_checkbox = QCheckBox("Save Bounding Boxes")
self.save_bboxes_checkbox.setChecked(False)

self.save_button = QPushButton("Save Image")
self.save_button.clicked.connect(self.save_image)

button_layout = QVBoxLayout()
button_layout.addWidget(self.save_bboxes_checkbox)
button_layout.addWidget(self.save_button)

main_layout = QHBoxLayout()
main_layout.addWidget(self.view)
main_layout.addLayout(button_layout)
self.setLayout(main_layout)

self.current_mode = "select"  # 'select' or 'draw'
self.drawing = False
self.start_pos = None
self.current_rect = None

self.bg_pixmap_item = None

self.load_background_image()
# self.draw_triangle()   #
Чтобы запустить его, просто запустите Python на нем (я использую изображение, поэтому вы должны заменить это на JPG, который у вас есть), затем нажмите B и нарисуйте изображение. Установите флажок и сохраните изображение. < /p>
Если вы это сделаете, вы получите изображение и текстовый файл.  Затем с этим простой сценарием < /p>
import cv2
image_path = "./debu2.png"
txt_path = "./debu2.txt"

colors = [ (0, 255, 0),(255, 0, 0)]

image = cv2.imread(image_path)
if image is None:
print("Error: Could not load image")
exit()

img_height, img_width = image.shape[:2]
print(f"({img_width},{img_height})")

# Read and process bounding box file
with open(txt_path, 'r') as f:
for line in f:
parts = line.strip().split()
if len(parts) != 5:
continue

# Parse values
class_id = parts[0]
c = int (class_id)
x_center = float(parts[1]) * img_width
y_center = float(parts[2]) * img_height
width = float(parts[3]) * img_width
height = float(parts[4]) * img_height

# Convert from center coordinates to corner coordinates
x1 = int(x_center - width/2)
y1 = int(y_center - height/2)
x2 = int(x_center + width/2)
y2 = int(y_center + height/2)

print(f"{x1},{y1},{x2},{y2}")

# Draw rectangle and label
cv2.rectangle(image, (x1, y1), (x2, y2), colors[c], 2)
cv2.putText(image, class_id, (x1, y1-5),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, colors[c], 2)

# Display result
cv2.imshow("Bounding Box Visualization", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
i get

Результаты являются синими. Вы, очевидно, видите, что это неправильно. src = "https://i.sstatic.net/5i3julho.png"/>
Как видно, что синие Bbobes работают здесь.
Как я могу исправить часть, где изображение загружается? src = "https://i.sstatic.net/u1c9peed.jpg"/>
Я ясно вижу, что скрипт изменяет размер изображений, которые нежелательны. Как я могу исправить этот сценарий

Подробнее здесь: https://stackoverflow.com/questions/795 ... ound-image
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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