Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python选择ROI OpenCV_Python_Opencv - Fatal编程技术网

Python选择ROI OpenCV

Python选择ROI OpenCV,python,opencv,Python,Opencv,你好, 我用python创建了一个应用程序,用于选择图像的感兴趣区域(ROI),记录并标记它。但我有一个限制,一个投资回报率每张图像,有人知道如何有多个选择的投资回报率每张图像?同样在附加的图片上,你们可以看到我有多个窗口,我希望它在一个窗口中有不同的选项,在这种应用程序上使用什么包 下面是我使用opencv2编写的python代码。提前谢谢你的帮助 for image in filelist: img = cv2.imread(image) fromCenter = Fal

你好,

我用python创建了一个应用程序,用于选择图像的感兴趣区域(ROI),记录并标记它。但我有一个限制,一个投资回报率每张图像,有人知道如何有多个选择的投资回报率每张图像?同样在附加的图片上,你们可以看到我有多个窗口,我希望它在一个窗口中有不同的选项,在这种应用程序上使用什么包

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

  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键,然后选择第二个ROI并按enter键等。完成后,按escape键。它返回每个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()
结果:


至少在问题的第一部分,您是否考虑过尝试使用
cv2.createROIs()
而不是
cv2.createROI()
?打开图像窗口后,选择第一个ROI并按enter键,然后选择第二个ROI并按enter键等。完成后,按escape键。它返回每个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。它支持矩形、直线、圆和多边形

使用它:

pip install EasyROI

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

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

使用它:

pip install EasyROI

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

谢谢你,它起作用了。在一个窗口中使用所选图像的图像面板的想法如何?你至少知道我需要使用什么软件包吗?谢谢我不太清楚你说的一个带有图像面板的窗口是什么意思…像GUI?如果是这种情况,您应该尝试tkinter或pyqt模块返回一些错误:索引器:索引1超出大小为1的轴0的界限。@如果退出图像时未选择ROI,则shahar_m I复制了索引器。请阅读关于如何使用此代码的答案。我刚刚测试过,它仍然有效。谢谢,它有效。在一个窗口中使用所选图像的图像面板的想法如何?你至少知道我需要使用什么软件包吗?谢谢我不太清楚你说的一个带有图像面板的窗口是什么意思…像GUI?如果是这种情况,您应该尝试tkinter或pyqt模块返回一些错误:索引器:索引1超出大小为1的轴0的界限。@如果退出图像时未选择ROI,则shahar_m I复制了索引器。请阅读关于如何使用此代码的答案。我刚刚测试过,它仍然有效。