安装必要包
安装OpenCvSharp4
using OpenCvSharp;
using OpenCvSharp.Extensions;
sunnyui
实验介绍
还没做完,就做完了讲的那几个功能,以后有空给补上
1、通过导入图片按钮将图片导入进去
2、按照图片显示比例,对图片进行缩放
3、然后转为灰度
4、接着按照分析范围,对图片进行裁剪,这里的裁剪是对中间部分开始进行的裁剪
- 分析范围需要除以100,再乘以图片实际的长度和宽度,作为应该分析的长度和宽度了;
- 将实际的长度和宽度减去需要分析的长度和宽度除以2,就可以得到左上角的点了;这样就OK了
5、通过点击取中心点按钮,实现确定图片中心点的功能(返回的中心点数据可以知道,但是还没有对返回的数据进行处理)
- 原理是首先new 获得中心点信息的窗体
- 在本来的.cs中制作一张图片 通过函数接口传入
- 经过一系列处理后,可以通过对象.里面的元素,就可以获得双击界面里面所得到的中心点的坐标值。
6、MTF测试
- 主要是使用了 .Ptr(centery + pixel_y);可以获得某一行/列或者某一个像素的值
- 然后对这个取到的像素点进行处理
7、数据处理
- 也就是先使用 Fit.Polynomial 对得到的数据,进行二次拟合函数(也就是什么x对应什么y)
- 根据二次拟合结果就可以得到 一条函数,此时就可以计算我们需要的x对应的y的值
- 还可以将数据显示在chart中,这一步我还没有做
前期
using OpenCvSharp;
using OpenCvSharp.Extensions;
using MathNet.Numerics;
public static Mat img;
public static Mat img2;
public static Mat gray;
public static Mat STAR;
public static Mat rings_Display = new Mat();
public static int centroidx ;//装载点击的中心点坐标
public static int centroidy;
public static int centerx ;//很小的那张图的宽度 加上中心点的坐标
public static int centery ;
public static double STAR_R = 0;//所画圆(最外圈)的半径
public double[] LPPH_disp;
public double[] MTF_ring_disp;
public double[] LPPH_fit_Data;
public double[] MTF_fit_Data;
public double MTF_30P = 0;
public double MTF_50P = 0;
public double Angular_freq_30P = 0;
public double Angular_freq_50P = 0;
public double LPMM_30P = 0;
public double LPMM_50P = 0;
导入图片
导入图片并显示在pictureBox上
img = new Mat($@"{ofd.FileName}");
OpenFileDialog ofd = new OpenFileDialog();
//Filter属性可以过滤要选择的文件类型
ofd.Filter = "(*.jpg)|*.jpg|(*.png)|*.png";//这样只显示了.docx的文件 我新建的doc和txt文件都没有显示出来
ofd.Title = "请选择图片";//title 属性属性可以设置文件对话框的标题
// ofd.Multiselect = true;//表示可以多选 默认是不可以多选的
ofd.InitialDirectory = @"F:\StudyData_ele\test\cSharp\SFR\SFRTest\TestPic";//初始打开目录
//ofd.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);//这是系统提供的桌面路径,还可以是其他的路径:比如文档、音乐等文件夹
if (ofd.ShowDialog() == DialogResult.OK)
{
img = new Mat($@"{ofd.FileName}");//注意这里要这样写 因为直接获得的地址里面的是\而不是\\
//Mat img = new Mat(@"F:\StudyData_ele\Project\simaite\endoscope\新版\picTest\WindowsFormsApp1\pic\1.jpg");
img2 = new Mat();//用来保存裁剪后的图片
OpenCvSharp.Size i;
i.Width = 0;
i.Height = 0;
try
{
double picsize = double.Parse(textBox1