利用OpenCV实现图像的仿射变换
仿射变换可以形象的表示成如下形式:一个平面内任意的平行四边形ABCD可以被仿射变换映射为另一个平行四边形A'B'C'D',如果四边形的面积不等于0,仿射变换就被这两个平行四边形(其中的三个顶点)唯一的定义,这里注意确定一个平行四边形只需要三个顶点。我们可以把仿射变换想象成把一幅图像画到一个胶板上,在胶板的角上推或拉以得到不同的平行四边形。
下面的程序实现了对图像的仿射变换,还包括图像旋转、缩放这两个重要的子集。
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream.h>
int main( int argc, char** argv )
{
CvPoint2D32f srcTri[3],dstTri[3];
CvMat* rot_mat = cvCreateMat( 2, 3, CV_32FC1 );
CvMat* warp_mat = cvCreateMat( 2, 3, CV_32FC1 );
IplImage *src, *dst, *srcBak, *dstBak;
int TLx = 0, TLy = 0, TRx = 0, TRy = 0, DLx = 0, DLy = 0;
double angle = 40, scale = 0.8;
float delta = 0.01;
int PressKey;
char name[1][80];
if(!(src=cvLoadImage("C:/Users/jinxing/Desktop/Tests/test/Debug/lena.bmp",1)) )
{
printf("Input Error\n");
return -1;
}
srcTri[0].x = 0;// Top left
srcTri[0].y = 0;
srcTri[1].x = src->width-1;//Top right
srcTri[1].y = 0;
srcTri[2].x = 0;//Down left
srcTri[2].y = src->height-1;
&nb
仿射变换可以形象的表示成如下形式:一个平面内任意的平行四边形ABCD可以被仿射变换映射为另一个平行四边形A'B'C'D',如果四边形的面积不等于0,仿射变换就被这两个平行四边形(其中的三个顶点)唯一的定义,这里注意确定一个平行四边形只需要三个顶点。我们可以把仿射变换想象成把一幅图像画到一个胶板上,在胶板的角上推或拉以得到不同的平行四边形。
下面的程序实现了对图像的仿射变换,还包括图像旋转、缩放这两个重要的子集。
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <iostream.h>
int main( int argc, char** argv )
{
CvPoint2D32f srcTri[3],dstTri[3];
CvMat* rot_mat = cvCreateMat( 2, 3, CV_32FC1 );
CvMat* warp_mat = cvCreateMat( 2, 3, CV_32FC1 );
IplImage *src, *dst, *srcBak, *dstBak;
int TLx = 0, TLy = 0, TRx = 0, TRy = 0, DLx = 0, DLy = 0;
double angle = 40, scale = 0.8;
float delta = 0.01;
int PressKey;
char name[1][80];
if(!(src=cvLoadImage("C:/Users/jinxing/Desktop/Tests/test/Debug/lena.bmp",1)) )
{
printf("Input Error\n");
return -1;
}
srcTri[0].x = 0;// Top left
srcTri[0].y = 0;
srcTri[1].x = src->width-1;//Top right
srcTri[1].y = 0;
srcTri[2].x = 0;//Down left
srcTri[2].y = src->height-1;
&nb

本文详细介绍了如何利用OpenCV库进行图像的仿射变换操作,通过指定源图像dst和输入图像input,结合浮点数参数,实现图像的平移、旋转和缩放等效果。内容涵盖变换矩阵的构建和应用,为图像处理提供了实用的技术指导。

284

被折叠的 条评论
为什么被折叠?



