c# OpenCvSharp透视矫正参数调整器

news/2024/6/17 22:13:24 标签: 计算机视觉, 人工智能

 透视矫正不够智能化,每次都要进行局部参数调整,不便于程序使用,程序流程还是那几个步骤;

1、读取图像、灰度化

2、高斯滤波

3、二值化

4、边缘检测

灰度化图

上个图看看经过调整透视矫正边缘检测结果我还是挺满意的

发现一个新问题获取最大面积的四个点有两个点重复在一个位置

一、读取图像、灰度化

 固定化格式按部就班

 private void button1_Click(object sender, EventArgs e)
 {
     OpenFileDialog dialog = new OpenFileDialog();
     dialog.Multiselect = false;//该值确定是否可以选择多个文件
     dialog.Title = "请选择文件夹";
     dialog.Filter = "所有文件(*.*)|*.*";
     if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
     {
        // 1、读取图像、灰度化
         string file = dialog.FileName;
         Mat image = Cv2.ImRead(file, ImreadModes.Color);
         Mat src_gray = new Mat();
         Cv2.CvtColor(image, src_gray, ColorConversionCodes.BGR2GRAY); // 转换为灰度图像
 }

 二,高斯滤波

高斯模糊容易找到最大边界进行校正具体参数说明搜索一堆答案不在描述了

/// <summary>
/// 2、高斯滤波
/// </summary>
private void GaussianBlur()
{
    Cv2.GaussianBlur(src_img, dst, new OpenCvSharp.Size(gussX, gussY), gussPX, gussPY);   //高斯模糊
    pictureBox1.Image = dst.ToBitmap();
    pictureBox1.Refresh();
}

 三、二值化

二值化区分索要区域,便于边缘检测

/// <summary>
/// 二值化
/// </summary>
private void Threshold()
{
    if (cmBoxThre.Text == "")
    {
        return;
    }
    ThresholdTypes aaa = (ThresholdTypes)Enum.Parse(typeof(ThresholdTypes), cmBoxThre.Text);
    try
    {
        Cv2.Threshold(src_img, dst, tkBarThresh.Value, tkBarMaxValue.Value, aaa);//阈值二值化
        picBoxShowDel.Image = dst.ToBitmap();
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }

}

四、边缘检测 

 /// <summary>
 /// 边缘检测Canny
 /// </summary>
 private void Canny()
 {
     int hole = 0;
     if (!int.TryParse(txtBoxCannyHole.Text, out hole))
     {
         return;
     }
     try
     {
         Cv2.Canny(src_img, dst, tkBarCannyMin.Value, tkBarCannyMax.Value, hole, rbBtnTrue.Checked);  

         picBoxShowDel.Image = dst.ToBitmap();
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
     }
 }

未完后续在补充~


http://www.niftyadmin.cn/n/5308740.html

相关文章

贯穿设计模式-享元模式思考

写享元模式的时候&#xff0c;会想使用ConcurrentHashMap来保证并发&#xff0c;没有使用双重锁会不会有问题&#xff1f;但是在synchronize代码块里面需要尽量避免throw异常&#xff0c;希望有经验的同学能够给出解答&#xff1f; 1月6号补充&#xff1a;没有使用双重锁会有问…

【Python】Excel不同sheet另存为不同CSV

我有一个excel&#xff0c;内有不同sheet&#xff0c;现在批量生成不通csv文件&#xff0c;并以sheet名命名&#xff0c;或根据sheet名调整命名。 # 读取新的Excel文件 df pd.read_excel(rD:\itm\data.xlsx, sheet_nameNone)# 遍历每个sheet&#xff0c;将其另存为不同的CSV文…

在数据库造数据发现的bug也是bug

上个月&#xff0c;我和开发小哥讨论过一个问题&#xff0c;开发小哥专门提醒我&#xff0c;页面上新增功能尽可能在前端造一些数据去测试&#xff0c;如果直接从数据库里插入的数据&#xff0c;定位问题还是有些说不清楚。 讨论的过程和细节就是以下的对话内容&#xff1a; …

2022年多元统计分析期中试卷

多元正态均值检验 一、去年卖出的一岁牛犊的平均身高为 51 英寸&#xff0c;平均背脂厚度是 0.3 英寸&#xff0c;平均肩高是 56 英寸。已知今年卖出的 76 头一岁牛犊的 3 项平均指标为(50, 0.2, 54)‘&#xff0c;样本协差阵及其逆矩阵为 S [ 3.00 − 0.053 2.97 − 0.053 0…

Spring Boot实现数据加密脱敏:注解 + 反射 + AOP

文章目录 1. 引言2. 数据加密和脱敏的需求3. Spring Boot项目初始化4. 敏感数据加密注解设计5. 实现加密和脱敏的工具类6. 实体类和加密脱敏注解的使用7. 利用AOP实现加密和脱敏8. 完善AOP切面9. 测试10. 拓展功能与未来展望10.1 加密算法的选择10.2 动态注解配置 11. 总结 &am…

docker 完成MySQL的主从复制

文章目录 搭建步骤 搭建步骤 拉取镜像 docker pull mysql:5.7运行主从 docker run -p 3307:3306 --name mysql-master -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_P…

BetaFlight开源代码之电压校准

BetaFlight开源代码之电压校准 1. 源由2. 分析数据流3. 采样电路3. 原理4. 示例5. 实测&转换数据6. 参考资料 1. 源由 既然复杂的BetaFlight开源代码之电流校准都过了一遍&#xff0c;电压相对来说是比较简单的&#xff0c;一起过一下 2. 分析数据流 电源路径1》采样电路…

深度学习中训练自己的模型的时候该如何设置学习率呢?

深度学习中训练自己的模型的时候该如何设置学习率呢&#xff1f; 前言公式讲解 前言 我们在看完论文之后&#xff0c;想要自己动手在自己家的数据集上试一试模型的效果。但是训练中有太多的超参数需要设置&#xff0c;而且我们的算力资源不一定会和论文作者恰好一样&#xff0…