Opencv:不同dpi图像的感兴趣区域(ROI)

时间:2017-01-20 07:58:03

标签: python image opencv

我正在阅读图像并通过传递矩形的左上角坐标和右下角坐标然后裁剪图像来查找感兴趣的区域。一些客户端提供相同图像的100 dpi,200 dpi或400 dpi图像的样本。在这些类型的图像中,当具有不同dpi的图像时,输入坐标位于其他位置。我正在做template matching任务,我给出了包含文本的小模板。找到文本后,边界框将绘制到匹配的部分。从该边界框参考,我必须从图像中找到父矩形,然后保存在文件夹中。对于100 dpi图像,它正在工作,但一旦我改变图像与不同的dpi矩形缩小。图像是:

enter image description here

下面的代码在模板匹配链接中更新:

startX = abs(startX - 113)
startY = abs(startY - 5)
endX = abs(endX + 117)
endY = abs(endY + 208)
cv2.rectangle(image, (startX, startY), (endX, endY), (0, 0, 255), 2)

以下代码用于查找矩形和裁剪:

first = [660,1000]
last = [1030,1400]
i = 1
for imagePath in glob.glob(args["images"] + "/*.jpg"):
    print imagePath
    image = cv2.imread(imagePath)

    cropped = ROI_extract(first,last,image)
    savingName = "SGBAU_pink/pnr" + str(i) + ".jpg"
    cv2.imwrite(savingName, cropped)
    i = i + 1
    cv2.imshow("Cropped",cropped)
    cv2.waitKey(0)

如何解决问题以找到不同dpi图像的实际感兴趣区域并找到准确的投资回报率?给出一些粗略的想法来解决它。

1 个答案:

答案 0 :(得分:1)

OpenCV并不真正关心DPI,它只是使用Mat来包含图像。我不确定我是否理解你想要编写的内容,但是如果你有以英寸为单位的坐标并且你知道源DPI你可以用行和列来转换它们:

x_px = x_inch * DPI

y_px = y_inch * DPI

否则,如果所有图像具有相同的比例但分辨率不同,则可以简单地将它们缩放到一个参考尺寸(即100dpi分辨率正在工作)。为此,您可以在OpenCV中使用resize函数。