1. 程式人生 > >計算特徵點通過單應矩陣後的座標的小函式

計算特徵點通過單應矩陣後的座標的小函式

在影象處理中,常常需要用兩幅圖的對應特徵點來計算單應矩陣。一般會用findHomography之類的函式來找這個單應矩陣。

我一直很好奇特徵點通過找到的矩陣變換後會在什麼位置。所以自己寫了個小函式,可以計算點通過單應矩陣後的座標。

程式碼如下:

#include <opencv2/opencv.hpp>

#include <opencv2/features2d/features2d.hpp>

#include <opencv2/imgproc/imgproc_c.h>

#include <opencv2/nonfree/nonfree.hpp>

#include <stdio.h>

#include <stdlib.h>

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

usingnamespace cv;

usingnamespace std;

int getpoint(vector< Point2f > a_in,vector< Point2f >*a_out,Mat H)

{

    Mat Ma;

    Mat Mb;

    Ma.create(3,1,CV_64F);

    Mb.create(3

,1,CV_64F);

    for(int i=0;i<a_in.size();i++)

    {

        Ma.at<double>(0,0)=a_in[i].x;

        Ma.at<double>(1,0)=a_in[i].y;

        Ma.at<double>(2,0)=1;

        Mb=H*Ma;

        Point2f f=Point2f(Mb.at<double>(0,0),Mb.at<double>(1,0));

        a_out->push_back(f);

// cout<<Mb;

    }

    return 0;

}

int main()

{

    vector<Point2f> a,b;

    a.push_back(Point2f(1,2));

    a.push_back(Point2f(2,3));

    a.push_back(Point2f(3,4));

    Mat H=(Mat_<double>(3,3)<<1,2,3,4,5,6,7,8,9);

    getpoint(a, &b, H);

    cout<<b;

    return 0;

}

需要注意的是,兩個相乘的矩陣必須滿足矩陣乘法的條件。還有資料型別必須一致,在本程式碼中也就是H矩陣必須是double型別的。

相關推薦

計算特徵通過矩陣座標函式

在影象處理中,常常需要用兩幅圖的對應特徵點來計算單應矩陣。一般會用findHomography之類的函式來找這個單應矩陣。 我一直很好奇特徵點通過找到的矩陣變換後會在什麼位置。所以自己寫了個小函式,可以計算點通過單應矩陣後的座標。 程式碼如下: #include &l

python opencv入門 特徵匹配+性查詢目標(39)

內容來自OpenCV-Python Tutorials 自己翻譯整理 目標: 我們將結合特徵點匹配和尋找單應性的方法,使用calib3d模組在複雜的影象當中尋找已知目標。 基礎: 這裡簡單說一下什麼事單應變換,如果有說的不對,還請各位看官斧正。 一

目初始化 矩陣 本質矩陣 恢復R t 三角變換求 3D

/* * This file is part of ORB-SLAM2 * * 單目相機初始化 * 用於平面場景的單應性矩陣H(8中運動假設) 和用於非平面場景的基礎矩陣F(4種運動假設), * 然後通過一個評分規則來選擇合適的模型,恢復相機的旋轉矩陣R和平移向量t 和

矩陣計算旋轉角和平移量

三維變換 Q:  have used this code as a basis to detect my rectangular target in a scene.I use ORB and Flann Matcher.I have been able to d

2D 對 求解基礎矩陣 F 本質矩陣E 矩陣 H 進而求 旋轉矩陣 R 和 t

*對極幾何 求解 兩組單目相機 2D影象 間的 旋轉平移 矩陣 * 2D 點對 求 兩相機的 旋轉和平移矩陣 * 空間點 P 兩相機 畫素點對 p1 p2 兩相機 歸一化平面上的點對 x1 x2 與P點對應 * 相機內參數 K 兩鏡頭旋轉平移矩陣 R t 或者 變換矩陣 T

Homography矩陣

在計算機視覺中,平面的單應性被定義為一個平面到另外一個平面的投影對映。因此一個二維平面上的點對映到攝像機成像儀上的對映就是平面單應性的例子。如果點Q到成像儀上的點q的對映使用齊次座標,這種對映可以用矩陣相乘的方式表示。若有一下定義: 則可以將單應性簡單的表示為:

矩陣H,求解及影象透射變換warpPerspective

1.代數求解 K為內參,R為旋轉矩陣 2.函式求解 getPerspectiveTransform()和findHomography() 都用於計算單應性矩陣,即解一個線性方程組。由於單應矩陣有8個未知數(3*3,其中第9個數為1),所以至少需要4個點(每個點-x,y,提供2

矩陣與基礎矩陣/本質矩陣的區別 本質矩陣分解失效情況?

基礎矩陣與本質矩陣 基礎矩陣與本質矩陣反應的是對極幾何中一幅影象上的點在另一幅影象上的對應點的的位置關係,本質矩陣則是基本矩陣的一種特殊情況,是在歸一化影象座標下的基本矩陣,可以理解為本質矩陣對應的座標位於相機座標系,基礎矩陣對應的座標位於影象平面座標系,具體

平面矩陣Homography介紹

在計算機視覺中,平面的單應性被定義為一個平面到另外一個平面的投影對映。因此一個二維平面上的點對映到攝像機成像儀上的對映就是平面單應性的例子。如果點Q到成像儀上的點q的對映使用齊次座標,這種對映可以用矩陣相乘的方式表示。若有一下定義: 則可以將單應性簡單的表示為:

影象拼接—SIFT+Flann匹配+估計矩陣—(全景圖panorama)

開發環境:python+opencv3 筆者拼接影象的步驟如下: step1: 利用特徵運算元檢測並描述,常見的特徵運算元在cv2.xfeatures2中都有,比如角點harris,斑點surf,sift等,這些運算元的原理不再過多闡述。 step1:對於

相機標定(具體過程詳解)張正友、矩陣、B、R、T

首先先宣告一點,本文介紹的方法並非很多文章中介紹的方法只是應用,直接呼叫matlab或者opencv的內部原有相機標定函式,本文主要介紹求解相機引數的一個大體流程。 相機標定分:內參標定、外參標定、c矩陣 內參標定:採用棋盤圖或者點陣圖,將相機固定(焦距、光圈等

Opencv2D特徵框架---使用二維特徵對映尋找已知物體

程式碼 #include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #inc

SLAM入門之視覺里程計(5):矩陣

在之前的博文OpenCV,計算兩幅影象的單應矩陣,介紹呼叫OpenCV中的函式,通過4對對應的點的座標計算兩個影象之間單應矩陣HH,然後呼叫射影變換函式,將一幅影象變換到另一幅影象的視角中。當時只是知道通過單應矩陣,能夠將影象1中的畫素座標(u1,v1)(u1,v1)變換到影象2中對應的位置上(u2

SLAM筆記(四)運動恢復結構的幾何數學(本徵矩陣矩陣、基礎矩陣)

1. 間接法進行運動恢復的前提假設 對於結構與運動或視覺三維重建中,通常假設已經通過特徵匹配等方法獲取了匹配好的點對。 先求出匹配點對再獲取結構和運動資訊的方法稱作間接法。 間接法最重要的三個假設是: 1.擁有一系列兩幀之間的匹配點對。但同時假設匹配關係不一定精

矩陣計算(相機標定)時點的提取

一、角點檢測 cv::goodFeaturesToTrack()   檢測整個影象內的角點  本例子裡面無法使用。 執行後的結果如圖所示:           使用findChessboardCorners()   自動尋找板內的角點 //! finds che

Homography,opencv,矩陣計算原理

Features2D + Homography to find a known object #include <stdio.h> #include <iostream> #include "opencv2/core/core.hpp"

opencv 影象仿射變換 計算仿射變換對應特徵的新座標 影象旋轉、縮放、平移

常常需要最影象進行仿射變換,仿射變換後,我們可能需要將原來影象中的特徵點座標進行重新計算,獲得原來影象中例如眼睛瞳孔座標的新的位置,用於在新得到影象中繼續利用瞳孔位置座標。 關於仿射變換的詳細介紹,請見上面連結的部落格。 我這裡主要介紹如何在已經知道原影象中若干特徵點的

OpenCV仿射變換+投射變換+矩陣

arpa title tle 匹配 之間 phy 帶來 http cti OpenCV仿射變換+投射變換+單應性矩陣 本來想用單應性求解小規模運動的物體的位移,但是後來發現即使是很微小的位移也會帶來超級大的誤差甚至錯誤求解,看起來這個方法各種行不通,還是要匹配知道深度

ECCV 2018 | 曠視科技提出GridFace:通過學習區域性變換實現人臉校正

全球計算機視覺三大頂會之一 ECCV 2018(European Conference on Computer Vision)即將於 9 月 8 -14 日在德國慕尼黑拉開帷幕,曠視科技有多篇論文被此大會接收。在這篇論文中,曠視科技提出的一種通過學習區域性單應變換實現人臉校正的全新方法——GridFac

form表選button按鈕提交頁面重新整理問題解決

button,input type=button按鈕在IE和w3c,firefox瀏覽器區別 當在IE瀏覽器下面時,button標籤按鈕,input標籤type屬性為button的按鈕是一樣的功能,不會對錶單進行任何操作。 但是在W3C瀏覽器,如Firefox下就需要注意了,button標籤按鈕會提