OpenCV学习笔记_图像扭曲及旋转操作

#include
#include

using namespace std;

int main(void){
	CvPoint2D32f srcTri[3], dstTri[3];
	//量化矩阵的创建
	//旋转
	CvMat* rot_mat = cvCreateMat(2, 3, CV_32FC1);
	//扭曲
	CvMat* warp_mat = cvCreateMat(2, 3, CV_32FC1);
	IplImage *src, *dst;
	src = cvLoadImage("d:\\testPic\\1.jpeg");
	if(src != 0){
		//为dst申请空间,类似使用cvCreateImage();
		dst = cvCloneImage(src);
		dst->origin = src->origin;
		cvZero(dst);

		//compute warp matrix
		//在原图上确定一个三角形,再确定映射到目标图像上的三角形
		srcTri[0].x = 0;
		srcTri[0].y = 0;
		srcTri[1].x = src->width - 1;
		srcTri[1].y = 0;
		srcTri[2].x = 0;
		srcTri[2].y = src->height - 1;
		dstTri[0].x = src->width * 0.0;
		dstTri[0].y = src->height * 0.33;
		dstTri[1].x = src->width * 0.85;
		dstTri[1].y = src->height * 0.25;
		dstTri[2].x = src->width * 0.15;
		dstTri[2].y = src->height * 0.7;

		//获取量化矩阵
		cvGetAffineTransform(srcTri, dstTri, warp_mat);
		//仿射变换
		cvWarpAffine(src, dst, warp_mat);
		cvNamedWindow("Affine_Transform", 1);
		cvShowImage("Affine_Transform", dst);
		cvWaitKey();
		cvCopy(dst, src);

		//compute rotation matrix
		//获取旋转中心
		CvPoint2D32f center = cvPoint2D32f(src->width / 2, src->height / 2);
		//旋转角度
		double angle = 90.0;
		//扩展比例
		double scale = 1;
		//获取量化矩阵
		cv2DRotationMatrix(center, angle, scale, rot_mat);
		//仿射变换
		cvWarpAffine(src, dst, rot_mat);
		cvShowImage("Affine_Transform", dst);
		cvWaitKey();
	}
	cvReleaseImage(&dst);
	cvReleaseMat(&rot_mat);
	cvReleaseMat(&warp_mat);
	return 0;
}

你可能感兴趣的:(OpenCV学习)