使Box 2的大小等於Box 1的最佳方式是什麼,以便CvCopy();可應用於:OpenCV:使用OpenCV合併兩個圖像
編輯:
也許我並沒有把這個問題正確。所以我重新措辭它。鑑於圖像2(如上圖所示),我想將其轉換爲如下所示:
基本上我必須在它之間添加一個黑色邊框。調整大小將無法正常工作,因爲我的圖片會變形。換句話說,我必須在圖像周圍定義thikness中添加零。
而且雖然示出爲空,這些圖像(框)可以具有在其內部的某些對象,這是我未示出。
使Box 2的大小等於Box 1的最佳方式是什麼,以便CvCopy();可應用於:OpenCV:使用OpenCV合併兩個圖像
編輯:
也許我並沒有把這個問題正確。所以我重新措辭它。鑑於圖像2(如上圖所示),我想將其轉換爲如下所示:
基本上我必須在它之間添加一個黑色邊框。調整大小將無法正常工作,因爲我的圖片會變形。換句話說,我必須在圖像周圍定義thikness中添加零。
而且雖然示出爲空,這些圖像(框)可以具有在其內部的某些對象,這是我未示出。
您可以使用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)
現在看到的結果:
初始小圖像:
修改新形象:
它與我的大圖像大小相同(這裏沒有顯示,認爲沒有必要,如果你願意,我可以上傳)
擴大較小的一個也不會是最好的主意,因爲你會得到大量的圖像失真的 - 而這將是更好的收縮較大的一個,如果最終的大小不是問題。
您可以調整使用cv::resize()
圖片(這是C++函數 - 我沒有使用OpenCV的點網)。
實施細則in the API。
在合併方面,它取決於你的定義,但簡單地使用cv::copy()
不會去做。有一個關於圖像合併的完整教程in the documentation, here。
什麼是盒子,什麼是錯誤的大小調整功能? 'http:// opencv.willowgarage.com/documentation/python/imgproc_geometric_image_transformations.html#resize' –
錯誤是失真 – gpuguy
ROI怎麼樣? –