Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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 调整边界框的大小和位置,同时使其稍微居中_Python_Image_Opencv_Image Processing - Fatal编程技术网

Python 调整边界框的大小和位置,同时使其稍微居中

Python 调整边界框的大小和位置,同时使其稍微居中,python,image,opencv,image-processing,Python,Image,Opencv,Image Processing,我有一组图像,它们有各自的边界框坐标(x,y,w,h)。一些边界框是矩形的,所以首先我想让它们成为正方形,同时仍然以感兴趣的区域为中心。使用下面一个苹果的例子,在茎上有一个边界框,我想把这个框展开成一个正方形,同时保持它在茎的中心 其次,在提取出边界框的内容后,我希望通过将边界框大小增加n个像素并提取然后重复来捕获上下文信息。之后,我想将感兴趣区域的几何中心移动几个像素,然后重复多重边界框提取。如下图所示,不同颜色的框表示我要提取的不同框。右图显示了我想要实现的中心位置的微小偏移 我知道如何

我有一组图像,它们有各自的边界框坐标(x,y,w,h)。一些边界框是矩形的,所以首先我想让它们成为正方形,同时仍然以感兴趣的区域为中心。使用下面一个苹果的例子,在茎上有一个边界框,我想把这个框展开成一个正方形,同时保持它在茎的中心

其次,在提取出边界框的内容后,我希望通过将边界框大小增加n个像素并提取然后重复来捕获上下文信息。之后,我想将感兴趣区域的几何中心移动几个像素,然后重复多重边界框提取。如下图所示,不同颜色的框表示我要提取的不同框。右图显示了我想要实现的中心位置的微小偏移


我知道如何在numpy中实现这一点,但是否有更高级别的函数/库可以帮助我定义边界框并对其进行操作?

我使用此图像来实现相同的效果:


代码和注释(如说明所示):


结果是:


检查我是否正确。如果你想要的话,我会回答的。是的,这就是我要找的。我用Numpy实现了一些东西,你能分享你的代码让我比较一下吗?好的,等一下。。。
#!/usr/bin/python3
# 2017.11.25 17:10:34 CST
# 2017.12.01 11:23:02 CST

import cv2
import numpy as np

## Read and copy 
img = cv2.imread("cat.jpg")
canvas = img.copy()

## set and crop the ROI 
x,y,w,h = bbox = (180, 100, 50, 100)
cv2.rectangle(canvas, (x,y), (x+w,y+h), (0,0,255), 2)
croped = img[y:y+h, x:x+w]
cv2.imshow("croped", croped)

## get the center and the radius
cx = x+w//2
cy = y+h//2
cr  = max(w,h)//2

## set offset, repeat enlarger ROI
dr = 10
for i in range(0,4):
    r = cr+i*dr
    cv2.rectangle(canvas, (cx-r, cy-r), (cx+r, cy+r), (0,255,0), 1)
    croped = img[cy-r:cy+r, cx-r:cx+r]
    cv2.imshow("croped{}".format(i), croped)

## display 
cv2.imshow("source", canvas)
cv2.waitKey()
cv2.destroyAllWindows()