最终效果如下:
左侧为检测图片、右侧为模板,右下角textbox为轮毂中心的像素坐标
操作步骤:
1、点击打开图像选择一张比较不错的图片,用于画模板;
2、在picturebox中画取ROI区域生成模板(拖拽线不显示就合理利用微软提供的画形状的方法和合理使用picturebox.Refresh()即可解决);
3、重新选取一张待检测图片,点击模板匹配,即可找到ROI区域并把圆的边界和圆心找到;
完整代码如下(代码还有待改善):
using OpenCvSharp;
using OpenCvSharp.Extensions;
using System;
using System.Linq;
using System.Windows.Forms;
using Point = OpenCvSharp.Point;
using Size = OpenCvSharp.Size;
namespace DrawROI
{
public partial class Form1 : Form
{
private System.Drawing.Point RectStartPoint, tempEndPoint;
bool blnDraw;
Mat ImageROI;
Mat OrgMat;
private string FilePath;
public Form1()
{
InitializeComponent();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
RectStartPoint = e.Location; //获得鼠标按下的pictureBox上坐标
Invalidate();
blnDraw = true;//判断标志
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (blnDraw)
{
if (e.Button != MouseButtons.Left)//判断是否按下左键
{
return;
}
tempEndPoint = e.Location; //记录框的位置和大小
//pictureBox上开始点坐标
//Rect.Location = new System.Drawing.Point(
//Math.Min(RectStartPoint.X, tempEn