python - Python 选择 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,然后选择第二个 ROI 并按 Enter 等。完成后按退出键。它返回每个 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()
结果:
推荐阅读
- google-cloud-platform - 用于 n2d 标准机器类型的 min-cpu-platform 未显示可从 api 获得
- c# - 如何在 Layout.cshtml 中引用我的包
- javascript - 如何从存储在我的 PC 上的文件中获取 XML 数据并使用 javascript 填充 HTML 表格?
- javascript - 即使是短字符串消息,Javascript Webworker postmessage 也很慢
- r - 如何在R中生成具有偏态正态分布的随机数?
- java - Liquibase 格式化的 sql 自动生成的 id
- javascript - Axios:在单独的文件中使用 baseUrl 会导致在 axios 请求标头中设置身份验证令牌时出现问题
- typescript - 将自定义本地类型添加到由 TypeScript 编译器生成的输出声明
- sql-server - 在 VBA 中处理数十万 SQL Server 行
- azure-devops - YAML 管道模板参数语法