首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python select ROI OpenCV

Python select ROI OpenCV
EN

Stack Overflow用户
提问于 2018-10-02 17:23:45
回答 2查看 14.8K关注 0票数 0

Sample Image

你好,

我用python创建了一个应用程序,用于选择图像的感兴趣区域(ROI),记录并标记它。但是我对每个图像有一个ROI的限制,有人知道如何在每个图像中选择多个ROI吗?另外在附加的图像上,正如你所看到的,我有多个窗口,我希望它在一个窗口中有不同的选项,在这种应用程序上使用什么包。

下面是我使用opencv2编写的python代码。提前感谢您的帮助

代码语言:javascript
复制
  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")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-02 23:33:06

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

输入图像:

示例:

代码语言:javascript
复制
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()

结果:

票数 3
EN

Stack Overflow用户

发布于 2021-02-14 17:37:15

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

使用它:

代码语言:javascript
复制
pip install EasyROI

from EasyROI import EasyROI  
roi_helper = EasyROI()  
roi = roi_helper.draw_rectangle(frame, quantity=2)  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52605556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档