最近看了篇文章,講述的是單應性矩陣homography matrix的理解與應用,嘗試著執行文章中的**時發現總是報異常。目前水平尚屬於初級階段的我花了乙個下午的時間,還請了外援,現在終於解決了。
遇到的問題如下圖所示。
將點由point改為point2f後這個問題得到了解決。
其他一些可能由於原作者手誤敲錯**而引起的問題這裡就不再提出。下面是改正後可執行的**。
#include
#include
#include
using
namespace cv;
using
namespace
std;
void main()
namedwindow("input image", cv_window_freeratio);
imshow("input image", src);
//讀入用來替代廣告圖中某一廣告牌的
//用來替換某一廣告牌的四角座標
src_corners[0]=point2f(0.0, 0.0);
src_corners[1]=point2f(replaceimg.cols, 0.0);
src_corners[2]=point2f(0.0, replaceimg.rows);
src_corners[3]=point2f(replaceimg.cols, replaceimg.rows);
//廣告圖中被替代廣告牌的四角座標
dst_corners[0] = point2f(786, 517);
dst_corners[1] = point2f(1018, 395);
dst_corners[2] = point2f(799, 658);
dst_corners[3] = point2f(1053, 605);
//計算單應性矩陣
mat h = findhomography(src_corners, dst_corners);
//將用來替換廣告牌的影象進行形狀視角變換
mat output_img;
warpperspective(replaceimg, output_img, h, src.size());
//求掩膜
mat m1 = mat::zeros(replaceimg.size(), cv_8uc1);
m1 = scalar(255);
mat mask_output;
warpperspective(m1, mask_output, h, src.size());
namedwindow("mask result", cv_window_freeratio);
imshow("mask result", mask_output);
//得到最終的結果並儲存
mat result1;
add(output_img, output_img, result1, mask_output);
mat result2;
bitwise_not(mask_output, mask_output);
add(src, result1, result2,mask_output);
mat result;
add(output_img, result2, result);
namedwindow("final result", cv_window_freeratio);
imshow("final result", result);
imwrite("result.png", result);
waitkey(0);
}
輸入的廣告圖如下:
被用來替換廣告圖中某一廣告牌的影象如下:
最終的替換效果圖如下:
單應性矩陣和仿射變換 單應性矩陣自適應估計方法
單應性矩陣自適應估計方法 許金山,王一江,程 徐,李松,陳勝勇 摘要 摘要 如何從初始匹配點集中估計出精確的單應性矩陣,有效地剔 除誤匹配,一直以來都是視覺領域研究的重點和難點,也是實際相關技術應用 中最為關鍵的一步。通過將特徵點對相似度概念應用於 lmeds 的樣本選取過 程,提出了一種新的單應性...
Homography單應性矩陣程式實現
單應性矩陣重要應用在求解兩幅影象的對映關係,或者影象座標與世界座標的對映關係。這裡主要在張正有相機標定法的基礎上,求解h。具體理論為請點 相機標定法 張正有 opencv程式實現 std vector pt1 4 std vector pt2 4 pt1 0 point2f 0,0 pt1 1 po...
單應性矩陣H和基礎矩陣F
一 單應性矩陣 單應性矩陣描述的是共麵點在兩個相機檢視下的畫素點的約束關係,描述的是點與點之間的約束關係,使用單應矩陣可以找到像點在另一幅影象上對應點的確切位置。即當已知兩幅影象間的單應性矩陣h時,可以通過 特殊情況1 當相機只純旋轉,不平移時,即使不共面,也可以使用單應性來描述,因為此時基礎矩陣f...