0

使框 2 的大小等于框 1 的最佳方法是什么,以便 CvCopy(); 可以应用:

在此处输入图像描述

编辑:

也许我没有正确地提出这个问题。所以我重新措辞。给定图像 2(如上所示),我想将其转换为如下所示:
在此处输入图像描述

基本上我必须在它上面添加一个黑色边框。调整大小将不起作用,因为我的图像会失真。换句话说,我必须在图像周围的定义厚度中添加零。

此外,虽然显示为空,但这些图像(框)内部可能有一些对象,我没有显示。

4

2 回答 2

1

您可以使用copyMakeBorder函数来执行此操作。我不知道dotnet,下面是python中的示例代码。另请访问上述功能的文档:DOCS

首先加载两个图像。imb是大图,ims是小图。

import cv2
import numpy as np

imb = cv2.imread('messi4.jpg')
ims = cv2.imread('template.jpg')

现在让我们rb,cb成为大图像的行数和列数,rs,cs对于小图像也是如此。

rb,cb = imb.shape[:2]
rs,cs = ims.shape[:2]

最后,要使用该copyMakeBorder功能,您需要在顶部、底部、左侧和右侧添加行数和列数。所以我们需要找到它们。

top = (rb-rs)/2
bottom = rb - rs - top
left = (cb-cs)/2
right = cb - cs - left

最后应用函数。

res = cv2.copyMakeBorder(ims,top,bottom,left,right,cv2.BORDER_CONSTANT)

现在看看结果:

原始小图

在此处输入图像描述

修改后的新图像

在此处输入图像描述

和我的大图一样大(这里没有展示,觉得没必要,如果你愿意,我可以上传)

于 2012-06-22T15:56:04.063 回答
0

扩大较小的不是最好的主意,因为您会得到很多图像失真 - 如果最终尺寸不是问题,最好缩小较大的。

您可以使用cv::resize( )(这是 C++ 函数 - 我没有使用 OpenCV dot net)来调整图像大小。

实现细节 在 API 中

在合并方面,这取决于您的定义,但简单地使用cv::copy( )不会这样做。文档中有关于图像合并的完整教程,请点击此处

于 2012-06-22T11:44:27.160 回答