【问题标题】:Shrink ROI in OpenCV Python在 OpenCV Python 中缩小 ROI
【发布时间】:2016-05-19 01:10:17
【问题描述】:

尝试缩小 ROI(图像的感兴趣区域)并将其粘贴到图像其余部分的正常大小。它似乎不起作用,因为它给了我错误。我到目前为止的代码是 x1,x2,y1,y2 是原始 roi 的坐标。

resize_roi = cv2.resize(roi,None,fx=0.5, fy=0.5, interpolation =cv2.INTER_CUBIC) #indentation wrong
newimg_res = img.copy()
newimg_res[y1:y2, x1:x2] = resize_roi
cv2.imshow('Resize Rectangle',newimg_res)
cv2.waitKey(0)
cv2.destroyAllWindows()

谁能建议我做错了什么或如何解决它?

【问题讨论】:

  • 欢迎来到stackoverflow。不妨先看看这里:stackoverflow.com/help/mcve 你能添加一张图片,添加你得到的错误并描述预期的结果吗?

标签: python opencv image-processing


【解决方案1】:

我认为在Vedranh13 的回答中以下行不正确:

newimg_res[(.5 * y1):(.5 * y2), (.5 * x1):(.5 * x2)] = resize_roi; 

原因:0.5*y1<y1,然而,在缩小时,x1y1(左上角)远离原始位置,x2y2 更靠近。一个简单的解决方案是在原始坐标中添加ROI 的实际宽度的一半,得到x1y1

【讨论】:

    【解决方案2】:

    您的代码正在尝试获取子图像,将其缩小,然后将其放回原始位置。这是失败的,因为那没有意义。解决此问题的方法取决于您的目的,但一种方法是更改​​您尝试替换的部分的大小,例如:

    import numpy as np
    import cv2
    img = cv2.imread('pic.jpe')
    x1, x2, y1, y2 = 45, 145, 45, 145
    roi = img[y1:y2, x1:x2]
    resize_roi = cv2.resize(roi,None,fx=0.5, fy=0.5, interpolation =cv2.INTER_CUBIC) #indentation wrong
    newimg_res = img.copy()
    newimg_res[(.5 * y1):(.5 * y2), (.5 * x1):(.5 * x2)] = resize_roi
    cv2.imshow('Resize Rectangle',newimg_res)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    虽然它运行时没有错误,但如果没有有关您的目的/预期输出的更多信息,我无法知道这是否是您想要的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多