C# RotationDetector 图片旋转角度检测

news2024/11/27 14:50:30

效果

 项目

VS2022+.net4.8+ OpenCvSharp4+Sdcb.RotationDetector

代码

using OpenCvSharp;
using Sdcb.RotationDetector;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace RotationDetector_图片旋转角度检测
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            startupPath = Application.StartupPath;
            rd = new PaddleRotationDetector(RotationDetectionModel.EmbeddedDefault);

        }

        Bitmap bmp;
        string fileFilter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
        string img = "";
        string startupPath = "";

        DateTime dt1 = DateTime.Now;
        DateTime dt2 = DateTime.Now;

        PaddleRotationDetector rd;

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = fileFilter;
            if (ofd.ShowDialog() != DialogResult.OK) return;

            pictureBox1.Image = null;

            img = ofd.FileName;
            bmp = new Bitmap(img);
            pictureBox1.Image = new Bitmap(img);
            textBox1.Text = "";

        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (img=="") { return; }
            Mat src = OpenCvSharp.Extensions.BitmapConverter.ToMat(new Bitmap(pictureBox1.Image));
            Cv2.CvtColor(src, src, ColorConversionCodes.RGBA2RGB);//mat转三通道mat
            dt1 = DateTime.Now;
            RotationResult r = rd.Run(src);
            dt2 = DateTime.Now;
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("图片旋转角度:"+ r.Rotation );
            sb.AppendLine("--------------------");
            sb.AppendLine("耗时:" + (dt2 - dt1).TotalMilliseconds + "ms");
            textBox1.Text = sb.ToString();
        }

        /// <summary>
        /// 90
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            if (bmp==null)
            {
                return;
            }

            var mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmp);
            Cv2.CvtColor(mat, mat, ColorConversionCodes.RGBA2RGB);
            Cv2.Rotate(mat, mat, RotateFlags.Rotate90Clockwise);
            var bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
            pictureBox1.Image = bitmap;
        }

        /// <summary>
        /// 180
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {

            if (bmp == null)
            {
                return;
            }

            var mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmp);
            Cv2.CvtColor(mat, mat, ColorConversionCodes.RGBA2RGB);
            Cv2.Rotate(mat, mat, RotateFlags.Rotate180);
            var bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
            pictureBox1.Image = bitmap;
        }

        /// <summary>
        /// 270
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            if (bmp == null)
            {
                return;
            }

            var mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmp);
            Cv2.CvtColor(mat, mat, ColorConversionCodes.RGBA2RGB);
            Cv2.Rotate(mat, mat, RotateFlags.Rotate90Counterclockwise);
            var bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
            pictureBox1.Image = bitmap;
        }
    }
}

Demo下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域)

优质项目专栏&#xff1a;提升自身的硬实力&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实战掌握技能&#xff0c;助力用户更好利用 CSDN 平台&#xff0c;自主完成项目设计升级&#xff0c;提升自身的硬实力。 专栏订阅&#xff1a;项目大全提升自身的硬实力…

2023MWC精彩回顾 | 未来数字世界中的社交,游戏与娱乐

6月28日至6月30日&#xff0c;由GSMA主办的2023 MWC 上海世界移动通信大会&#xff08;简称“MWC 上海”&#xff09;启幕。「Paraverse平行云」参与组织并主持了本次大会中【未来数字世界中的社交&#xff0c;游戏与娱乐】的主题会议。 「Paraverse平行云」携手上海交通大学、…

中国物流,驶入大航海时代

出海的一体化&#xff0c;不仅仅是物流的一体化&#xff0c;更是产业链、供应链的一体化。在诸多问题下&#xff0c;想要帮助企业更好地出海&#xff0c;就不能只专注于自身的长板&#xff0c;而是需要先补齐短板。 作者|斗斗 编辑|皮爷 出品|产业家 出海时代真的要来了。…

CSAPP fall2015 深入理解计算机系统 lab1 datalab详解

Data Lab data lab 数据实验 这个数据实验请在linux机器上面运行&#xff0c;实测mac m1本跑不起来。windows没试过。 centos上需要安装好gcc运行环境。 如果跑不起来记得安装下面这个东西&#xff1a; yum -y install glibc-devel.i686 运行make btest的时候可能会有warni…

药物设计学笔记:导论篇

笔记来自《药物设计学》 文章目录 1.药物设计概述 1.药物设计概述 药品&#xff08;medicine&#xff09; 药物&#xff08;durg&#xff09; 辅料&#xff0c;药物是研究对象 留意 medicine 和 drug 的区别 药物来源包括天然来源和人工来源&#xff0c;前者如吗啡&#xff0…

Oracle数据库软件安装与卸载

Oracle数据库软件安装与卸载 实验目的及要求 学习Oracle12c数据库服务器软件和客户端软件的安 装与卸载,掌握客户端服务名的设置,建立客户端与服务器的网络连接,熟悉windows操作系统中Oracle相关服务的操作。理解数据库管理的基本架构。 &#xff08;1&#xff09;熟悉Oracle…

网讯wx1860接yt8521phy千兆网口调试

问题描述&#xff1a;网讯1860接yt8521phy出一路电口和3路光口都不通。 问题分析&#xff1a;影响网口不通一般有三个因素导致&#xff1a;固件、驱动、硬件。 固件&#xff1a;对于网口不通一般先确认固件是否烧写正确&#xff0c;咨询网讯FAE后将固件更新为&#xff1a;SF4…

人物建模软件是一种通过计算机技术和人工智能算法将真实人物可视化的创新工具

这种软件可以将现实中的人物形象转化为数字模型&#xff0c;使其在虚拟世界中栩栩如生。使用人物建模软件&#xff0c;用户可以轻松地创建自己或其他人的数字化人物形象&#xff0c;并赋予其丰富的人工智能功能。 人物建模软件具备高度的灵活性和逼真的效果。它可以通过多种方…

mysql 关于用户的练习

环境&#xff1a; (1) 创建用户 create user account1localhost identified by oldpwd1; 授予权限&#xff1a; #给表授予权限 grant select,insert on Team.player to account1localhost identified by oldpwd1;#给info字段授予update权限 grant update(info) on Team.pl…

WebDAV之π-Disk派盘+WPS

WPS 支持WebDAV方式连接葫芦儿派盘。 WPS Office是一款常用的办公软件&#xff0c;可以方便地编辑、查看和分享文字文档、电子表格和演示文稿等文件。而派盘则是一款本地私有云产品&#xff0c;可以将您的本地硬盘变成云存储空间&#xff0c;提供高效的文件存储、分享、同步和…

Jenkins2.4.0.2集成sonarqube9.9和sonar scanner

本文的前提是服务器部署好了 Jenkins和sonqube 代码可以手动推送到sonqube 现在我只实现了自动推代码 以及遇到的问题 解决方法 分为三步 都是在Jenkins配置 1 在全局环境配置 sonarqube &#xff08;配置身份&#xff0c;代你登录&#xff09; 2 在工具处配置sonar sca…

zabbix的客户机,监控内容,自动发现

zabbix 一&#xff1a;添加 zabbix 客户端主机1.服务端和客户端都配置时间同步2.服务端和客户端都设置 hosts 解析3.设置 zabbix 的下载源&#xff0c;安装 zabbix-agent24.修改 agent2 配置文件5.启动 zabbix-agent26.在服务端验证 zabbix-agent2 的连通性7.常用的键值8.在 We…

正大国际期货:甲醇期货有哪些投资优点?

甲醇期货市场有哪些投资优点&#xff1f; 甲醇期货市场的投资优点有三点&#xff1a;1、价格较低。甲醇期货实行保证金交易制度&#xff0c;降低了甲醇期货交易成本&#xff0c;也让更多投资者可以进行甲醇期货的交易。交易者只需要用10%的保证金就可从事100%的远期贸易、发挥…

初阶C语言——详解操作符(1)

Hello,我们又见面了&#xff0c;最近不知道大家是否在持续输出代码呢&#xff1f;代码能力是否提高了呢&#xff1f;今天让我们来一起学习操作符&#xff0c;操作符在我们学习语言中很重要&#xff0c;我们要知道每个操作符的作用和用法&#xff0c;下面开始我们的学习。 操作符…

yaml语言入门(YAML Ain‘t Markup Language)

文章目录 YAML为什么YAML强调自己不是一种标记语言&#xff1f;YAML文件与HTML、XML、JSON标记语言的异同 YAML的基本语法代码示例python解析yaml示例示例1示例2 python组包yaml示例 其他问题yaml中的引用的作用和用法 YAML YAML&#xff08;YAML Ain’t Markup Language 强调…

【Spring boot+VUE2+Android 7.1】智慧校园源码

一、智慧校园实现了智慧校园基础数据的统一管理&#xff0c;通过此平台提供教师基础信息管理、学生基础信息管理、用户认证管理、权限管理、资源管理、应用管理、第三方应用接入等基础功能与服务。 二、源码包含&#xff1a;电子班牌管理系统、成绩管理系统、考勤人脸刷卡管理系…

小马识途谈人物百科创建流程和技巧

百度百科通过搜集、整理和展示各种知识和信息&#xff0c;为人们提供了一个方便的查找和了解世界的平台。它的价值在于帮助人们获取知识和信息&#xff0c;并促进了知识的传播和共享。此外&#xff0c;百度百科还为学者、研究人员、教育工作者和一般公众提供了一个交流和分享知…

移动硬盘怎么加密?移动硬盘设置密码的方法

在工作中&#xff0c;我们经常需要使用移动硬盘来储存大量重要数据&#xff0c;而为了保护数据安全&#xff0c;我们则需要采用加密的方法来保护移动硬盘的安全。那么移动硬盘该怎么加密呢&#xff1f;下面我们就来了解两种移动硬盘加密的方法。 常规方法 我们可以使用BitLock…

计算机网络期末复习题(华南理工mooc习题及解答)

目录 &#x1f389;第一章 概述&#x1f389; &#x1f389;第二章 物理层&#x1f389; &#x1f389;第三章 数据链路层&#x1f389; &#x1f389;第四章 网络层&#x1f389; &#x1f389;第五章 运输层&#x1f389; &#x1f389;第六章 应用层&#x1f389; &am…

Vue 如何简单快速组件化

文章目录 前言相关文章组件化实战如何引入组件什么是父组件&#xff0c;什么是子组件如何实现给子组件赋值完整代码 如何调用子组件方法完整代码 总结 前言 为了简化拆分复杂的代码逻辑&#xff0c;和实现代码的组件化&#xff0c;封闭化。我们需要使用组件化的方法。我这里只…