OpenCV:使用OpenCV合并两个图像

时间:2012-06-22 11:29:33

标签: image image-processing opencv opencvdotnet

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

enter image description here

修改

也许我没有正确提出这个问题。所以我正在重新措辞。鉴于图像2(如上所示),我想将其转换为如下所示:
enter image description here

基本上我必须在它上面添加黑色边框。调整大小将无法正常工作,因为我的图像会被扭曲。换句话说,我必须在图像周围定义thikness中添加零。

虽然显示为空,但这些图像(方框)内部可能有一些物体,我没有显示。

2 个答案:

答案 0 :(得分: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)

现在看结果:

原始小图片

enter image description here

修改后的新图片

enter image description here

它与我的大图像大小相同(此处未显示,认为没有必要,如果你愿意,我可以上传)

答案 1 :(得分:0)

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

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

实施细节为in the API

就合并而言,这取决于您的定义,但仅使用cv::copy( )将无法执行此操作。有一个关于图像合并in the documentation, here的完整教程。