使框2的大小等于Box 1的最佳方法是什么,以便CvCopy();可以适用:
修改
也许我没有正确提出这个问题。所以我正在重新措辞。鉴于图像2(如上所示),我想将其转换为如下所示:
基本上我必须在它上面添加黑色边框。调整大小将无法正常工作,因为我的图像会被扭曲。换句话说,我必须在图像周围定义thikness中添加零。
虽然显示为空,但这些图像(方框)内部可能有一些物体,我没有显示。
答案 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)
现在看结果:
原始小图片:
修改后的新图片:
它与我的大图像大小相同(此处未显示,认为没有必要,如果你愿意,我可以上传)
答案 1 :(得分:0)
扩展较小的一个不是最好的主意,因为你会得到很多图像失真 - 相反,如果最终尺寸不是问题,缩小较大的一个会更好。
您可以使用cv::resize( )
调整图像大小(这是C ++函数 - 我没有使用过OpenCV点网)。
实施细节为in the API。
就合并而言,这取决于您的定义,但仅使用cv::copy( )
将无法执行此操作。有一个关于图像合并in the documentation, here的完整教程。