python在图片上画框
时间: 2023-12-23 09:01:04 浏览: 44
使用Python对图片进行框选是一种常见的图像处理操作。首先,我们需要安装Python的图像处理库,比如Pillow或OpenCV。然后,我们可以使用这些库中提供的函数来读取图片并在图片上进行画框。
我们首先要读取图片,然后使用画框的函数来在图片上指定的位置画出矩形框。这可以通过指定框的左上角和右下角的坐标来实现。我们还可以指定框的颜色、线条粗细等参数来自定义框的样式。
另外,我们也可以在框上添加文字或标签,来标识这个框所代表的内容。这样就可以在图片上进行目标识别或标注。
最后,我们需要将画好框的图片保存到本地或者进行展示。通过这种方式,我们可以对图片进行目标标注,用于训练机器学习模型或者展示图像处理的结果。这种操作在计算机视觉、图像识别等领域中非常常见,也是Python在图像处理中的重要应用之一。
相关问题
在QLABEL上显示图片并画框‘
实现这个功能需要使用Python和一些相关的库,包括Qt和OpenCV。以下是一个简单的代码示例,可以在QLABEL上显示图像并绘制矩形框:
```python
from PyQt5.QtGui import QImage, QPixmap, QPainter, QPen
from PyQt5.QtCore import Qt, QPoint, QRect
from PyQt5.QtWidgets import QLabel
import cv2
class ImageLabel(QLabel):
def __init__(self):
super().__init__()
self.image = None
self.rect_start = None
self.rect_end = None
def set_image(self, image_path):
self.image = cv2.imread(image_path)
self.display_image()
def display_image(self):
height, width, channel = self.image.shape
bytesPerLine = 3 * width
qImg = QImage(self.image.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()
pixmap = QPixmap.fromImage(qImg)
self.setPixmap(pixmap)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.rect_start = event.pos()
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.rect_end = event.pos()
self.update()
def paintEvent(self, event):
super().paintEvent(event)
if self.rect_start and self.rect_end:
painter = QPainter(self)
painter.setPen(QPen(Qt.red, 2, Qt.SolidLine))
rect = QRect(self.rect_start, self.rect_end)
painter.drawRect(rect)
if __name__ == '__main__':
import sys
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
label = ImageLabel()
label.set_image('image.jpg')
label.show()
sys.exit(app.exec_())
```
在这个例子中,我们创建了一个名为`ImageLabel`的自定义QLabel类。我们重写了`set_image`方法来读取并显示图像,重写了`mousePressEvent`和`mouseReleaseEvent`方法来记录框的起点和终点,重写了`paintEvent`方法来绘制矩形框。
当我们运行这个代码示例时,它将显示一个名为`image.jpg`的图像,并且我们可以在图像上单击并拖动鼠标来绘制矩形框。
python yolov8 目标检测 推理画框
以下是使用yolov8进行目标检测推理并画框的Python代码示例:
```python
import cv2
import torch
from models.experimental import attempt_load
from utils.general import non_max_suppression, scale_coords, plot_one_box
from utils.torch_utils import select_device
# 加载模型
weights = 'yolov8s.pt'
device = select_device('')
model = attempt_load(weights, map_location=device)
stride = int(model.stride.max())
# 加载图片
img_path = 'test.jpg'
img = cv2.imread(img_path)
# 图片预处理
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (640, 640))
img = torch.from_numpy(img).to(device).float()
img /= 255.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
# 模型推理
pred = model(img)[0]
pred = non_max_suppression(pred, 0.4, 0.5)
# 画框
for det in pred:
if det is not None and len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img.shape[2:]).round()
for *xyxy, conf, cls in reversed(det):
label = f'{model.names[int(cls)]} {conf:.2f}'
plot_one_box(xyxy, img, label=label)
# 显示图片
img = img.mul(255).byte().cpu().numpy()
img = cv2.cvtColor(img[0], cv2.COLOR_RGB2BGR)
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述代码中,我们首先加载了yolov8模型,然后使用OpenCV库加载了一张图片。接着,我们对图片进行了预处理,将其转换为模型所需的格式。然后,我们使用模型对图片进行了推理,并使用非极大值抑制算法过滤了一些冗余的检测结果。最后,我们使用plot_one_box函数在图片上画出了检测框,并显示了结果。