opencv 图像旋转

一、图像旋转

算子:transpose(src, src);

transpose()可以实现像素下标的x和y轴坐标进行对调:dst(i,j)=src(j,i),接口形式

transpose(
  InputArray src, // 输入图像
  OutputArray dst, // 输出
)


算子:flip(src, src, 1);

flip()函数可以实现对图像的水平翻转、垂直翻转和双向翻转

void flip(
     InputArray src, // 输入图像
     OutputArray dst, // 输出
     int flipCode = 0 // >0: 沿y-轴翻转, 0: 沿x-轴翻转, <0: x、y轴同时翻转
  );

flip(img1,0)#水平轴翻转(上下翻转)
flip(img1,1)#垂直轴翻转(左右翻转)
flip(img1,-1)#双向翻转

二、代码显示

#if 1  // 旋转角度
Mat rotate_img(Mat src, int idx) {
	//旋转90度
	if (idx == 1) {
		transpose(src, src);
		flip(src, src, 1);
		return src;
	}
	//旋转180度
	else if (idx == 2) {
		flip(src, src, 0);
		flip(src, src, 1);
		return src;
	}
	//旋转270度
	else if (idx == 3) {
		transpose(src, src);
		flip(src, src, 0);
		return src;
	}
	else {
		return src;
	}

}
int main() {
	Mat src = imread("C:\\Users\\19473\\Desktop\\opencv_images\\33.jpg");
	if (!src.data)
	{
		printf("could not  load  image....\n");
	}

	imshow("原图", src);

	Mat  m1= rotate_img(src,1); //90度
	imshow("90度", m1);
	Mat  m2 = rotate_img(src, 2); //180度
	imshow("180度", m2);
	Mat  m3 = rotate_img(src, 3); //270度
	imshow("270度", m3);
	waitKey(0);
	return 0;
}
#endif

 

 

 

三、饶中任一点旋转

我这里写的是绕着图像的中心旋转


// 旋转图片  旋转一定的角度
void RotateImage(Mat& image, const double angle)
{
	Mat M;
	int w = image.cols;
	int h = image.rows;

	// 获取旋转矩阵        旋转中心   角度   缩放比例 1 
	M = getRotationMatrix2D(Point2f(w/2,h/2),angle,1);
	double cos = abs(M.at<double>(0,0));
	double sin = abs(M.at<double>(0,1));
	int nw = cos * w + sin * h;
	int nh = sin * w + cos * h;
	M.at<double>(0, 2) += (nw / 2 - w / 2);
	M.at<double>(1, 2) += (nh /2  -  h/2  );

	warpAffine(image,image,M,Size(nw,nh),INTER_LINEAR,0);
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值