OpenCV-パース変換warpPerspective
2874 ワード
次の図は、ウィキペディアの透視投影の説明です.https://zh.wikipedia.org/wiki/%E9%80%8F%E8%A7%86%E6%8A%95%E5%BD%B1
ピボット変換モーメントの原理については、ブログを参照してください.http://blog.csdn.net/xiaowei_cqu/article/details/26471527
Opencvでパース変換を実現するには、主に次の2つのAPIがあります.
詳細は、公式ドキュメントを参照してください.
warpPerspective
https://docs.opencv.org/2.4.9/modules/imgproc/doc/geometric_transformations.html#warpperspective
getPerspectiveTransform
https://docs.opencv.org/2.4.9/modules/imgproc/doc/geometric_transformations.html#getperspectivetransform
サンプルソースコードは次のとおりです.
プログラム実行結果は以下の通りです.
ピボット変換モーメントの原理については、ブログを参照してください.http://blog.csdn.net/xiaowei_cqu/article/details/26471527
Opencvでパース変換を実現するには、主に次の2つのAPIがあります.
void warpPerspective(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar& borderValue=Scalar())
Mat getPerspectiveTransform(const Point2f src[], const Point2f dst[])
詳細は、公式ドキュメントを参照してください.
warpPerspective
https://docs.opencv.org/2.4.9/modules/imgproc/doc/geometric_transformations.html#warpperspective
getPerspectiveTransform
https://docs.opencv.org/2.4.9/modules/imgproc/doc/geometric_transformations.html#getperspectivetransform
サンプルソースコードは次のとおりです.
#include "opencv2/opencv.hpp"
#include
using namespace cv;
using namespace std;
///
const char* source_window = "Source image";;
const char* warpPerspective_window = "warpPerspective";
/**
* @
*/
int main( )
{
Point2f srcTri[4];
Point2f dstTri[4];
Mat warpPerspective_mat( 3, 3, CV_32FC1 );
Mat src, warpPerspective_dst;
/// Load the image
src = imread( "lena.bmp", IMREAD_COLOR );
/// Set the dst image the same type and size as src
warpPerspective_dst = Mat::zeros( src.rows, src.cols, src.type() );
/// ,
srcTri[0] = Point2f( 0,0 );
srcTri[1] = Point2f( src.cols - 1,0 );
srcTri[2] = Point2f( 0,src.rows - 1);
srcTri[3] = Point2f(src.cols - 1,src.rows - 1);
dstTri[0] = Point2f( 0,src.rows*0.13 );
dstTri[1] = Point2f( src.cols*0.9,0 );
dstTri[2] = Point2f( src.cols*0.2,src.rows*0.7 );
dstTri[3] = Point2f( src.cols*0.8,src.rows );
// 3 (2 x3 )
warpPerspective_mat = getPerspectiveTransform( srcTri, dstTri );
// ,
warpPerspective( src, warpPerspective_dst, warpPerspective_mat, src.size() );
//
namedWindow( source_window, WINDOW_AUTOSIZE );
imshow( source_window, src );
namedWindow( warpPerspective_window, WINDOW_AUTOSIZE );
imshow( warpPerspective_window, warpPerspective_dst );
/// ,
waitKey(0);
return 0;
}
プログラム実行結果は以下の通りです.