Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image OpenCV:使用OpenCV合并两个图像_Image_Image Processing_Opencv_Opencvdotnet - Fatal编程技术网

Image OpenCV:使用OpenCV合并两个图像

Image OpenCV:使用OpenCV合并两个图像,image,image-processing,opencv,opencvdotnet,Image,Image Processing,Opencv,Opencvdotnet,使方框2的大小等于方框1的最佳方法是什么,以便CvCopy();可应用于: 编辑: 也许我没有正确地提出这个问题。所以我要重新措辞。给定一个图像2(如上所示),我想将其转换为如下所示: 基本上我必须在它上面加一个黑色的边框。调整大小将不起作用,因为我的图像将失真。换句话说,我必须在图像周围定义厚度时添加零 另外,尽管显示为空,但这些图像(框)中可能有一些我没有显示的对象。扩展较小的对象不是最好的主意,因为您会得到大量图像失真-相反,如果最终大小不是问题,则最好缩小较大的对象 可以使用 CV:

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

编辑:

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

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


另外,尽管显示为空,但这些图像(框)中可能有一些我没有显示的对象。

扩展较小的对象不是最好的主意,因为您会得到大量图像失真-相反,如果最终大小不是问题,则最好缩小较大的对象

可以使用<代码> CV::调整大小()大小<代码>(这是C++函数-我还没有使用OpenCV点网)。 实施细节如下


就合并而言,这取决于您的定义,但简单地使用
cv::copy()
是不行的。有一个关于图像合并的完整教程。

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

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

import cv2
import numpy as np

imb = cv2.imread('messi4.jpg')
ims = cv2.imread('template.jpg')
rb,cb = imb.shape[:2]
rs,cs = ims.shape[:2]
现在让
rb,cb
成为大图像的行数和列数,同样地,对于小图像,
rs,cs

import cv2
import numpy as np

imb = cv2.imread('messi4.jpg')
ims = cv2.imread('template.jpg')
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)
现在看看结果:

原始小图像

修改的新图像


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

什么是框,调整大小功能有什么问题<代码>http://opencv.willowgarage.com/documentation/python/imgproc_geometric_image_transformations.html#resize您是否阅读了发送给我的链接,它说“警告:由于我们正在添加src1和src2,它们必须具有相同的大小(宽度和高度)和类型”。另外,重新调整尺寸对我来说没有用,因为它会扭曲图像。我知道这一点。您最初的问题暗示您希望将其中一个调整为与另一个相同的大小,然后合并。