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 图片旋转相关推荐

  1. iOS传感器:实现一个随屏幕旋转的图片

    作者 非典型技术宅 关注 2017.05.24 17:22* 字数 1568 阅读 351评论 7喜欢 14 在写上一个动画系列的时候学到了非常多的知识,也认识了很多人.例如受邀进入了某个神秘的动效组 ...

  2. 图片的裁剪、旋转、平移、模糊

    图片的裁剪.旋转.放缩.平移.模糊) 1.图片的裁剪 2.Tensorflow 中图片的裁剪 2.图片的旋转 3.图片的放缩 4.图片的平移 5.图片的模糊 俗话说的好呀:图片不够,想办法来凑 在深度 ...

  3. 借助numpy.rot90实现图片顺时针旋转90°,旋转后图片没有黑边

    返回numpy 类型图片, numpy 通道是 "BGR" import cv2 import glob import numpy as np from PIL import Im ...

  4. [VC]旋转位图图片的算法函数

    网上有很多关于位图旋转的资料,但是讲得很清楚的不多(我没有仔细查找).于是我也写了一个,希望能给向我这样的初学者一点帮助. 第一步,你必须知道位图即BMP格式的文件的结构. 位图(bmp)文件由以下几 ...

  5. java 旋转图片_Java实现图片翻转以及任意角度旋转

    最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在 ...

  6. jQuery 缩放 旋转 裁剪图片 Image Cropper

    A simple jQuery image cropping plugin. Demo cropper是一款使用简单且功能强大的图片剪裁jQuery插件.该图片剪裁插件支持图片放大缩小,支持图片旋转, ...

  7. 为什么手机上传图片这么慢 前端_解决BootStrap Fileinput手机图片上传显示旋转问题_心病_前端开发者...

    最近因为项目需要用到了bootstrap fileinput的插件,在使用苹果手机上传图片预览时,发现图片方向和手机本地存储方向不一致问题.后来通过查询资料了解图片具有EXIF(Exchangeabl ...

  8. java根据exif旋转,关于图片文件旋转JPEG与EXIF信息

    关于图片文件旋转JPEG与EXIF信息 2019/10/31 0:36:39  YuLimin  程序员俱乐部  我要评论(1) 摘要:关于图片文件旋转JPEG与EXIF信息比如某相机拍摄出来的相片, ...

  9. php图片翻转函数,PHP图片处理之图片旋转和图片翻转实例

    图片的旋转和翻转也是Web项目中比较常见的功能,但这是两个不同的概念,图片的旋转是按特定的角度来转动图片,而图片的翻转则是将图片的内容按特定的方向对调.图片翻转需要自己编写函数来实现,而旋转图片则可以 ...

最新文章

  1. 全面掌握ISO8583报文协议
  2. 计算机二级c语言题型2018,计算机二级C语言题型和评分标准
  3. 开源oracle client,oracle client安装与配置
  4. input python 验证int_全国计算机二级Python真题解析-1
  5. [Vue源码分析]谷歌翻译后,Vue双向数据绑定失效了?
  6. PHP中__get()和__set()的用法实例详
  7. 什么是CDP(连续数据保护)?
  8. python函数手册中文_Python中文手册-Python函数
  9. php 操作数组 (合并,拆分,追加,查找,删除等)
  10. [UML]UML系列——时序图(顺序图)sequence diagram
  11. Js+XML 操作 [ZT]
  12. 虚拟机里ubuntu扩容主分区/dev/sda1
  13. fiddler 的AutoRespoder的使用(手动添加测试桩)
  14. 第一篇:工作之我见一-----------细节决定成败(1)
  15. 西门子系列PLC教学视频资源1——S7-200和S7-200smart
  16. windows下Git连接使用
  17. FTP工具免费,6大免费的FTP工具
  18. itext7+poi实现excel转pdf
  19. centos 7 JDK 环境部署
  20. Mysql数据库(关系型与非关系型数据库)

热门文章

  1. oracle创建分词,Oracle 中文分词
  2. caffe 的layer的参数说明
  3. APScheduler Multi CronTrigger 实现
  4. DBA的工作职责和每日工作
  5. J.U.C 学习(三)之 “阻塞队列”
  6. 数字人民币最新技术成果将亮相2021年服贸会
  7. html之如何让button按钮居中
  8. 3D立体字生成器【免费在线工具】
  9. 【干货】网易VIP邮箱不给发外贸开发信(推广营销类邮件),账号被限制被封!
  10. Spring框架——加载属性(properties)文件