openc 图片旋转 ;OpenCvSharp 图片旋转
openc 图片旋转 ;OpenCvSharp 图片旋转
OpenCvSharp 版本 4.2.0
角度旋转核心代码:
/// <summary>/// 旋转图片任意角度/// </summary>/// <param name="src"></param>/// <param name="dst"></param>/// <param name="angle"></param>Mat rotate_arbitrarily_angle(Mat src, float angle){Mat dst = new Mat();float radian = (float)(angle / 180.0 * Cv2.PI);//填充图像int maxBorder = (int)(Math.Max(src.Cols, src.Rows) * 1.414); //即为sqrt(2)*maxint dx = (maxBorder - src.Cols) / 2;int dy = (maxBorder - src.Rows) / 2;Cv2.CopyMakeBorder(src, dst, dy, dy, dx, dx, BorderTypes.Constant);//旋转Point2f center = new Point2f((float)(dst.Cols / 2), (float)(dst.Rows / 2));Mat affine_matrix = Cv2.GetRotationMatrix2D(center, angle, 1.0);//求得旋转矩阵Cv2.WarpAffine(dst, dst, affine_matrix, dst.Size());//计算图像旋转之后包含图像的最大的矩形float sinVal = (float)Math.Abs(Math.Sin(radian));float cosVal = (float)Math.Abs(Math.Cos(radian));OpenCvSharp.Size targetSize = new OpenCvSharp.Size((int)(src.Cols * cosVal + src.Rows * sinVal),(int)(src.Cols * sinVal + src.Rows * cosVal));//剪掉多余边框int x = (dst.Cols - targetSize.Width) / 2;int y = (dst.Rows - targetSize.Height) / 2;Rect rect = new Rect(x, y, targetSize.Width, targetSize.Height);return new Mat(dst, rect);}
左旋转90°:
string strImg1 = txtImg1.Text.Trim();if (string.IsNullOrEmpty(strImg1)){MessageBox.Show("请选择图片");return;}Image img1 = pbImg.BackgroundImage;Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(new Bitmap(img1));Mat dst = rotate_arbitrarily_angle(src, 90);pbImg.BackgroundImage = dst.ToBitmap();
右旋转90°:
string strImg1 = txtImg1.Text.Trim();if (string.IsNullOrEmpty(strImg1)){MessageBox.Show("请选择图片");return;}Image img1 = pbImg.BackgroundImage;Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(new Bitmap(img1));Mat dst = rotate_arbitrarily_angle(src, -90);pbImg.BackgroundImage = dst.ToBitmap();
旋转180°:
string strImg1 = txtImg1.Text.Trim();if (string.IsNullOrEmpty(strImg1)){MessageBox.Show("请选择图片");return;}Image img1 = pbImg.BackgroundImage;Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(new Bitmap(img1));Mat dst = rotate_arbitrarily_angle(src, 180);pbImg.BackgroundImage = dst.ToBitmap();
垂直翻转:
string strImg1 = txtImg1.Text.Trim();if (string.IsNullOrEmpty(strImg1)){MessageBox.Show("请选择图片");return;}Image img1 = pbImg.BackgroundImage;Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(new Bitmap(img1));Mat dst = src.Flip(FlipMode.X);pbImg.BackgroundImage = dst.ToBitmap();
水平翻转:
string strImg1 = txtImg1.Text.Trim();if (string.IsNullOrEmpty(strImg1)){MessageBox.Show("请选择图片");return;}Image img1 = pbImg.BackgroundImage;Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(new Bitmap(img1));Mat dst = src.Flip(FlipMode.Y);pbImg.BackgroundImage = dst.ToBitmap();
源代码:https://download.csdn.net/download/TangLingBo/12628606
openc 图片旋转 ;OpenCvSharp 图片旋转相关推荐
- iOS传感器:实现一个随屏幕旋转的图片
作者 非典型技术宅 关注 2017.05.24 17:22* 字数 1568 阅读 351评论 7喜欢 14 在写上一个动画系列的时候学到了非常多的知识,也认识了很多人.例如受邀进入了某个神秘的动效组 ...
- 图片的裁剪、旋转、平移、模糊
图片的裁剪.旋转.放缩.平移.模糊) 1.图片的裁剪 2.Tensorflow 中图片的裁剪 2.图片的旋转 3.图片的放缩 4.图片的平移 5.图片的模糊 俗话说的好呀:图片不够,想办法来凑 在深度 ...
- 借助numpy.rot90实现图片顺时针旋转90°,旋转后图片没有黑边
返回numpy 类型图片, numpy 通道是 "BGR" import cv2 import glob import numpy as np from PIL import Im ...
- [VC]旋转位图图片的算法函数
网上有很多关于位图旋转的资料,但是讲得很清楚的不多(我没有仔细查找).于是我也写了一个,希望能给向我这样的初学者一点帮助. 第一步,你必须知道位图即BMP格式的文件的结构. 位图(bmp)文件由以下几 ...
- java 旋转图片_Java实现图片翻转以及任意角度旋转
最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在 ...
- jQuery 缩放 旋转 裁剪图片 Image Cropper
A simple jQuery image cropping plugin. Demo cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转, ...
- 为什么手机上传图片这么慢 前端_解决BootStrap Fileinput手机图片上传显示旋转问题_心病_前端开发者...
最近因为项目需要用到了bootstrap fileinput的插件,在使用苹果手机上传图片预览时,发现图片方向和手机本地存储方向不一致问题.后来通过查询资料了解图片具有EXIF(Exchangeabl ...
- java根据exif旋转,关于图片文件旋转JPEG与EXIF信息
关于图片文件旋转JPEG与EXIF信息 2019/10/31 0:36:39 YuLimin 程序员俱乐部 我要评论(1) 摘要:关于图片文件旋转JPEG与EXIF信息比如某相机拍摄出来的相片, ...
- php图片翻转函数,PHP图片处理之图片旋转和图片翻转实例
图片的旋转和翻转也是Web项目中比较常见的功能,但这是两个不同的概念,图片的旋转是按特定的角度来转动图片,而图片的翻转则是将图片的内容按特定的方向对调.图片翻转需要自己编写函数来实现,而旋转图片则可以 ...
最新文章
- 全面掌握ISO8583报文协议
- 计算机二级c语言题型2018,计算机二级C语言题型和评分标准
- 开源oracle client,oracle client安装与配置
- input python 验证int_全国计算机二级Python真题解析-1
- [Vue源码分析]谷歌翻译后,Vue双向数据绑定失效了?
- PHP中__get()和__set()的用法实例详
- 什么是CDP(连续数据保护)?
- python函数手册中文_Python中文手册-Python函数
- php 操作数组 (合并,拆分,追加,查找,删除等)
- [UML]UML系列——时序图(顺序图)sequence diagram
- Js+XML 操作 [ZT]
- 虚拟机里ubuntu扩容主分区/dev/sda1
- fiddler 的AutoRespoder的使用(手动添加测试桩)
- 第一篇:工作之我见一-----------细节决定成败(1)
- 西门子系列PLC教学视频资源1——S7-200和S7-200smart
- windows下Git连接使用
- FTP工具免费,6大免费的FTP工具
- itext7+poi实现excel转pdf
- centos 7 JDK 环境部署
- Mysql数据库(关系型与非关系型数据库)