opencv中getAffineTransform、getRotationMatrix2D以及warpAffine用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/love_image_xie/article/details/87283384
int main()
{
	cv::Mat srcImage = cv::imread("E:\\研究生\\学习材料\\学习书籍\\OpenCV图像处理编程实例-源码-20160801\\《OpenCV图像处理编程实例-源码-20160801\\images\\hand1.jpg");
	if (!srcImage.data)
		return -1;
	cv::imshow("srcImage", srcImage);
	int nRows = srcImage.rows;
	int nCols = srcImage.cols;
	cout << "srcRows: " <<nRows<<endl;
	cout << "srcCols: " << nCols << endl;
	//定义仿射变换的二维点数组
	//源图像和目标图像对应映射的三点
	cv::Point2f srcPoint[3];
	cv::Point2f resPoint[3];
	srcPoint[0] = cv::Point2f(0, 0);
	srcPoint[1] = cv::Point2f(nCols - 1, 0);
	srcPoint[2] = cv::Point2f(0, nRows - 1);
	resPoint[0] = cv::Point2f(nCols * 0, nRows*0.33);
	resPoint[1] = cv::Point2f(nCols*0.85, nRows*0.25);
	resPoint[2] = cv::Point2f(nCols*0.15, nRows*0.7);
	// 定义仿射变换矩阵2X3
	cv::Mat warpMat(cv::Size(2, 3), CV_32F);
	cv::Mat resultImage =
		cv::Mat::zeros(nRows, nCols, srcImage.type());
	// 计算仿射变换矩阵,即仿射变换的2*3数组
	warpMat = cv::getAffineTransform(srcPoint, resPoint);
	cout << "warpMat1: " << warpMat << endl;
	// 根据仿射矩阵计算图像仿射变换
	cv::warpAffine(srcImage, resultImage,
		warpMat, resultImage.size());
	cv::imshow("resultImage1", resultImage);
	// 仿射变换参数设置
	cv::Point2f centerPoint = cv::Point2f(nCols / 2, nRows / 2);
	double angle = -50;
	double scale = 0.7;
	// 获取仿射变换矩阵
	warpMat = getRotationMatrix2D(centerPoint, angle, scale);
	cout << "warpMat2: " << warpMat << endl;
	// 对原图像角度仿射变换
	cv::warpAffine(srcImage, resultImage,
		warpMat, resultImage.size());
	cv::imshow("resultImage2", resultImage);
	cv::waitKey(0);
}

猜你喜欢

转载自blog.csdn.net/love_image_xie/article/details/87283384