繁体   English   中英

Python 选择 ROI OpenCV

[英]Python select ROI OpenCV

示例图像

你好,

我在 python 中创建了一个应用程序,它选择图像的感兴趣区域(ROI),记录并标记它。 但是我对每张图像有一个 ROI 的限制,有人知道如何为每张图像选择多个 ROI 吗? 同样在附加图像上,如您所见,我有多个窗口,我希望它位于一个具有不同选项的窗口中,此类应用程序使用了哪些包。

这是我在 python 中使用 opencv2 的代码。 预先感谢您的帮助

  for image in filelist:
    img = cv2.imread(image)
    fromCenter = False
    r = cv2.selectROI(img, fromCenter)

    lbl = simpledialog.askstring("Image Label", "Please Enter Label")

    result = eTree.SubElement(results, "Image")

    path = eTree.SubElement(result, 'Path')
    roi = eTree.SubElement(result, 'ROI')
    label = eTree.SubElement(result, 'Label')

    path.text = str(image)
    roi.text = str(r)
    label.text = str(lbl)

    tree = eTree.ElementTree(results)
    i = i + 1
    if i == count:
        format = [('XML Files', '*.xml'), ('All Files', '*.*')]
        save = filedialog.asksaveasfilename(filetype=format, defaultextension='*.xml')
        tree.write(save, xml_declaration=True, encoding='utf-8', method="xml")

那么至少对于问题的第一部分,您是否考虑过尝试cv2.createROIs()而不是cv2.createROI() 当图像窗口打开时,您选择第一个 ROI 并按 Enter,然后选择第二个并按 Enter 等。完成后按 Esc 键。 它返回每个 ROI 的 x,y,w,h。 请注意,您必须相应地更改代码,但它允许您选择多个 ROI。

输入图像:

在此处输入图片说明

例子:

import cv2

img = cv2.imread('rois.png')

fromCenter = False
ROIs = cv2.selectROIs('Select ROIs', img, fromCenter)

ROI_1 = img[ROIs[0][1]:ROIs[0][1]+ROIs[0][3], ROIs[0][0]:ROIs[0][0]+ROIs[0][2]]
ROI_2 = img[ROIs[1][1]:ROIs[1][1]+ROIs[1][3], ROIs[1][0]:ROIs[1][0]+ROIs[1][2]]
ROI_3 = img[ROIs[2][1]:ROIs[2][1]+ROIs[2][3], ROIs[2][0]:ROIs[2][0]+ROIs[2][2]]

cv2.imshow('1', ROI_1)
cv2.imshow('2', ROI_2)
cv2.imshow('3', ROI_3)

cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

对于自定义 ROI,您可以使用EasyROI 它支持矩形、直线、圆形和多边形。

使用它:

pip install EasyROI

from EasyROI import EasyROI  
roi_helper = EasyROI()  
roi = roi_helper.draw_rectangle(frame, quantity=2)  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM