【发布时间】:2017-06-07 10:51:59
【问题描述】:
我需要在 X 和 Y 方向拉伸图像,但同时保持目标图像大小为 300x300。我正在使用 Open CV。每次我缩放图像然后调整它的大小时,我都会失去缩放,它看起来和我喂它缩放的图像一样。我该如何做到这一点?
这是缩放的代码
def scale(infile,outfile,scx,scy):
img = cv2.imread(infile,0)
height, width = img.shape[:2]
#aspectRatio = width / height
rows,cols = img.shape
if scx > 1 or scy > 1:
scimg = cv2.resize(img,None, fx = scx, fy = scy, interpolation = cv2.INTER_LINEAR)
else:
scimg = cv2.resize(img,None, fx = scx, fy = scy, interpolation = cv2.INTER_CUBIC)
#cheight, cwidth = scimg.shape[:2]
#area = cheight * cwidth
#nheight = math.sqrt(area / aspectRatio)
#nwidth = nheight * aspectRatio
#cv2.resize(scimg,((int)(nwidth), (int)(nheight)), interpolation = cv2.INTER_CUBIC)
#top = (int) (0.2*rows)
#bottom = (int) (0.2*rows)
#left = (int) (0.2*cols)
#right = (int) (0.2*cols);
#cv2.copyMakeBorder(scimg,top,left,bottom,right,cv2.BORDER_CONSTANT,value=255)
cv2.imwrite(outfile,scimg)
我使用 scales 数组作为 x 和 y 比例因子:scales = [(1,2),(2,1)]
我希望最终图像应该是 300x300 并且应该包含图像的缩放版本。
谢谢!!
【问题讨论】:
-
这个问题没有多大意义,你想拉伸图像但又想保持相同大小?你的意思是你想缩放图像但裁剪到原始大小?请发布您当前拥有的任何代码以及您想要实现的预期输出。
-
谢谢。我编辑了问题并添加了我正在使用的代码。
-
如果拉伸图像,它会更大。是否要拉伸它,然后裁剪原始大小的部分图像?
-
是的,但可以将其想象为缩小然后将其裁剪为 300x300。我希望 300x300 图像捕捉到图像已缩放并且与原始图像不同。可以做一些事情,比如填充然后调整大小或对图像进行上采样然后裁剪它吗?这是为了增强图像。
-
嗯,你可以通过两种方式实现这一点。一种方法是将显示器的 窗口大小 设置为您的原始图像大小,并在其中显示您的图像;但这仅适用于显示目的。另一种方法是创建一个零矩阵(或任何值),在其中放置一个与缩放图像大小相同的感兴趣区域,然后将缩放图像放置在 ROI 内。我将发布两种解决方案的答案。
标签: python opencv image-processing