【问题标题】:OpenCV: Merging two images using OpenCVOpenCV:使用 OpenCV 合并两个图像
【发布时间】:2012-06-22 11:29:33
【问题描述】:

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

编辑:

也许我没有正确提出问题。所以我重新措辞。给定一个图像 2(如上图),我想将其转换为如下所示:

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

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

【问题讨论】:

  • 什么是盒子,resize功能有什么问题? http://opencv.willowgarage.com/documentation/python/imgproc_geometric_image_transformations.html#resize

标签: image image-processing opencv opencvdotnet


【解决方案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)

现在看看结果:

原始小图:

修改后的新图片:

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

【讨论】:

    【解决方案2】:

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

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

    实现细节是in the API。

    就合并而言,这取决于您的定义,但仅使用cv::copy( ) 不会这样做。有完整的图片合并教程in the documentation, here.

    【讨论】:

    • 你读过你发给我的链接吗? ,它说“警告:由于我们要添加 src1 和 src2,它们都必须具有相同的大小(宽度和高度)和类型”。重新调整大小对我来说也没用,因为它会扭曲图像。
    • 我知道这一点。您最初的问题暗示您想将一个调整为与另一个相同的大小然后合并。
    猜你喜欢
    • 2016-01-19
    • 2011-11-27
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多