2012-06-22 170 views
0

使Box 2的大小等於Box 1的最佳方式是什麼,以便CvCopy();可應用於:OpenCV:使用OpenCV合併兩個圖像

enter image description here

編輯:

也許我並沒有把這個問題正確。所以我重新措辭它。鑑於圖像2(如上圖所示),我想將其轉換爲如下所示:
enter image description here

基本上我必須在它之間添加一個黑色邊框。調整大小將無法正常工作,因爲我的圖片會變形。換句話說,我必須在圖像周圍定義thikness中添加零。

而且雖然示出爲空,這些圖像(框)可以具有在其內部的某些對象,這是我未示出。

+1

什麼是盒子,什麼是錯誤的大小調整功能? 'http:// opencv.willowgarage.com/documentation/python/imgproc_geometric_image_transformations.html#resize' –

+1

錯誤是失真 – gpuguy

+0

ROI怎麼樣? –

回答

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

它與我的大圖像大小相同(這裏沒有顯示,認爲沒有必要,如果你願意,我可以上傳)

0

擴大較小的一個也不會是最好的主意,因爲你會得到大量的圖像失真的 - 而這將是更好的收縮較大的一個,如果最終的大小不是問題。

您可以調整使用cv::resize()圖片(這是C++函數 - 我沒有使用OpenCV的點網)。

實施細則in the API

在合併方面,它取決於你的定義,但簡單地使用cv::copy()不會去做。有一個關於圖像合併的完整教程in the documentation, here

+0

您是否閱讀過您發給我的鏈接?它說:「警告:因爲我們正在添加src1和src2,它們都必須具有相同的大小(寬度和高度)並鍵入」。重新調整尺寸對我來說也沒用,因爲它會扭曲圖像。 – gpuguy

+0

我知道這一點。你的原始問題意味着你想調整一個大小,然後合併。 – n00dle