2015-03-25 49 views
0

我正在從Opencv中的視頻進行拼接。我使用此示例拼接視頻的幀:http://docs.opencv.org/doc/tutorials/features2d/feature_detection/feature_detection.html。末了,我做這行合併與傳遞的迭代產生的線跡的新框架:Opencv調整一個針跡

Mat H = findHomography(obj, scene, CV_RANSAC); 

static Mat rImg; 
warpPerspective(vImg[0], rImg, H, Size(vImg[0].cols, vImg[0].rows), INTER_NEAREST);//(vImg[0], rImg, H, Size(vImg[0].cols * 2, vImg[0].rows * 2), CV_INTER_LINEAR); 

static Mat final_img(Size(rImg.cols*2, rImg.rows*2), CV_8UC3); 
static Mat roi1(final_img, Rect(0, 0, vImg[1].cols, vImg[1].rows)); 
Mat roi2(final_img, Rect(0, 0, rImg.cols, rImg.rows)); 

rImg.copyTo(roi2); 
vImg[1].copyTo(roi1); 

imwrite("stitch.jpg", final_img); 
vImg[0] = final_img; 

因此,這裏是我的問題:明明是針變爲在每次迭代大,所以我怎麼能調整到使它適合final_img圖像?

編輯 很抱歉,但我不得不刪除圖像

回答

0

對於第二個問題,你觀察的是在估計單應性錯誤。這可能會無論是從:

  1. 漂移(如果您將沿着序列的單應性),其累積,即小錯誤和幾十幀之後,開始變大
  2. 或(更可能),因爲你的參考圖像太對於你的新形象來說,這是一個古老的過程,他們展示的匹配點太少,不能提供準確的單應性,但足以找到一個通過cv::findHomography()內質量測試的人。

關於第一個問題,你需要添加一些代碼,跟蹤的拼接圖像的當前邊界的固定座標系。 我會建議選擇與第一張圖片鏈接的座標。

然後,當你縫合一個新的圖像時,你的確是將這個圖像投影到這個座標系上。 您可以首先計算輸入框4個角的投影座標,測試它們是否適合當前的拼接結果,如果需要將其複製到新的(更大)圖像,然後繼續拼接新圖像。

+0

嗨!在每一針步驟,我更新參考圖像與剛纔縫合的一個,所以我認爲我是在你稱爲漂移的情況下。如果我遇到這種情況,我該如何解決?對於第一個問題,我會盡力去做你說的,並且讓它知道它是否有效! – bjorn 2015-03-25 09:08:53

+0

如果您將拼接圖像作爲參考,某些情況下也可能會丟失一些信息(由於插值引入了模糊,或者拼接結果與當前幀之間的比例差異)。另一種可能性(可能具有更高的質量,但更多的開發開銷)將是在第一遍中計算所有單應性,然後同時查找從所有輸入幀優化的拼接圖像。 – sansuiso 2015-03-25 09:14:13

+0

嗯我明白,但我不能做到這一點,因爲它是一個流,而不是電腦上的視頻文件..現在我試圖調整針,如果我成功,我會讓你知道。 。感謝您的快速回復! – bjorn 2015-03-25 10:54:28