表格矯正(二)
上一篇文章中給出了一種對錶格進行矯正的方法,但是隻能用於只有一個表格的情況,對於有多個表格的情況的矯正的方法,將在這篇文章中給出。
單個表格矯正:opencv 表格識別之表格透視矯正(一)
一, 函數的介紹
(1)Homography(…)函數返回映射關係H(3*3的矩陣)
//! computes the best-fit perspective transformation mapping srcPoints to dstPoints.
CV_EXPORTS_W Mat findHomography(
InputArray srcPoints,
InputArray dstPoints,
int method=0,
double ransacReprojThreshold=3,
OutputArray mask=noArray());
srcPoints,dstPoints是兩視圖中匹配的點
method 是計算單應矩陣所使用的方法,是一個枚舉值。
ransacReprojThreshold 是允許的最大反投影錯誤,只在使用RANSAC方法時有效。
mask指出匹配的點是不是離羣值,用來優化匹配結果。
在這裏,我們只用前兩個 參數,也就是待矯正的圖像的四個點,與模板圖像的四個點(這四個點我們取圖像中最大的表格的四個角,因爲最大的表格比較好找),找出這兩個點的映射關係,再通過warpPerspective(…)函數對待矯正的圖像進行H映射。
(2)warpPerspective(…)對圖像進行變換
void warpPerspective(InputArray src, //輸入圖像
OutputArray dst, //輸出圖像
lnputArray M, //透視變換矩陣
Size dsize, //輸出圖像的大小
int flags=INTER_LINEAR, //輸出圖像的插值方法
int borderMode=BORDER_CONSTANT, //邊界的處理方法
const Scalar& borderValue=Scalar()) //邊界的顏色
透視變換矩陣就是H。
二,具體步驟
第一張是模板圖像,第二張是待矯正的圖像,我們要找出模板圖像的最大的表格,