c# OpenCvSharp透视矫正参数调整器
2024-01-03 16:05:56
?透视矫正不够智能化,每次都要进行局部参数调整,不便于程序使用,程序流程还是那几个步骤;
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);
}
}
未完后续在补充~
文章来源:https://blog.csdn.net/hb_ljj/article/details/135352688
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!