opencv学习-imgprocess-仿射变换warpAffine
2013-11-18 11:00
169 查看
opencv中的warpAffine函数可以对图像进行位移、旋转、缩放变换。getRotationMatrix2D可以获取旋转矩阵,getAffineTransform返回仿射矩阵。
代码如下:
代码如下:
#include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> using namespace cv; using namespace std; /// Global variables char* source_window = "Source image"; char* warp_window = "Warp"; char* warp_rotate_window = "Warp + Rotate"; /** @function main */ int main( int argc, char** argv ) { Point2f srcTri[3]; Point2f dstTri[3]; Mat rot_mat( 2, 3, CV_32FC1 ); Mat warp_mat( 2, 3, CV_32FC1 ); Mat src, warp_dst, warp_rotate_dst; /// Load the image src = imread( argv[1], 1 ); /// Set the dst image the same type and size as src warp_dst = Mat::zeros( src.rows, src.cols, src.type() ); /// Set your 3 points to calculate the Affine Transform srcTri[0] = Point2f( 0,0 ); srcTri[1] = Point2f( src.cols - 1, 0 ); srcTri[2] = Point2f( 0, src.rows - 1 ); dstTri[0] = Point2f( src.cols*0.0, src.rows*0.33 ); dstTri[1] = Point2f( src.cols*0.85, src.rows*0.25 ); dstTri[2] = Point2f( src.cols*0.15, src.rows*0.7 ); /// Get the Affine Transform warp_mat = getAffineTransform( srcTri, dstTri ); /// Apply the Affine Transform just found to the src image warpAffine( src, warp_dst, warp_mat, warp_dst.size() ); /** Rotating the image after Warp */ /// Compute a rotation matrix with respect to the center of the image Point center = Point( warp_dst.cols/2, warp_dst.rows/2 ); double angle = -50.0; double scale = 0.6; /// Get the rotation matrix with the specifications above rot_mat = getRotationMatrix2D( center, angle, scale ); /// Rotate the warped image warpAffine( warp_dst, warp_rotate_dst, rot_mat, warp_dst.size() ); /// Show what you got namedWindow( source_window, CV_WINDOW_AUTOSIZE ); imshow( source_window, src ); namedWindow( warp_window, CV_WINDOW_AUTOSIZE ); imshow( warp_window, warp_dst ); namedWindow( warp_rotate_window, CV_WINDOW_AUTOSIZE ); imshow( warp_rotate_window, warp_rotate_dst ); /// Wait until user exits the program waitKey(0); return 0; }
相关文章推荐
- 【OpenCV学习笔记】7.4仿射变换warpAffine()
- opencv学习(三十五)之仿射变换warpAffine
- opencv学习-imgprocess-为图片增加边界
- opencv学习-imgprocess-提取元素的轮廓及形状描述子
- opencv学习-imgprocess-判断点是否在轮廓内pointPolygonTest
- 学习OpenCV范例(十六)——重映射和仿射变换
- opencv学习-imgprocess-Remapping
- opencv学习——仿射变换
- OpenCV学习--仿射变换(affine)
- OpenCV学习26--仿射变换
- OpenCV学习六:findContours、drawContours、仿射变换、RotatedRect区域矫正及获取
- opencv学习-imgprocess-图像金字塔
- opencv学习-imgprocess-canny边缘提取
- opencv学习-imgprocess-反向投影Back Projection
- OpenCV学习记录3//仿射变换与重映射
- opencv学习-imgprocess-模板匹配matchTemplate
- opencv学习(6)---仿射变换
- 学习OpenCV范例(十六)——重映射和仿射变换
- opencv学习-imgprocess-计算图像矩moments
- opencv学习-imgprocess-直方图比较compareHist