功能:读取图片到picturebox中,用鼠标左键点击 选点,右键点击时,开始绘制多边形。

软件语言:opencvsharp,C#

private void pictureBox1_Paint(object sender, PaintEventArgs e){// Create pen.Pen pen = new Pen(Color.Red, 3);// Create points that define polygon.//Point point1 = new Point(50, 50);//Point point2 = new Point(100, 25);//Point point3 = new Point(200, 5);//Point point4 = new Point(250, 50);//Point point5 = new Point(300, 100);//Point point6 = new Point(550, 200);//Point point7 = new Point(250, 250);//Point[] curvePoints =//         {//     point1,//     point2,//     point3,//     point4,//     point5,//     point6,//     point7// };//画顶点if (polyPoints != null){foreach (System.Drawing.Point p in polyPoints){e.Graphics.FillEllipse(Brushes.Red, new Rectangle(p.X - 2, p.Y - 2, 4, 4));}}// Draw polygon to screen.//画多边形if (paint==true&& polyPoints != null && polyPoints.ToArray().Length>=3){e.Graphics.DrawPolygon(pen, polyPoints.ToArray());}paint = false;//polyPoints = null;//points_cv = null;}List<System.Drawing.Point> polyPoints = null;List<OpenCvSharp.Point> points_cv = null;bool cliceMenu = true;bool paint = false;private void pictureBox1_MouseDown(object sender, MouseEventArgs e){if (cliceMenu){if (e.Button == MouseButtons.Left){if (polyPoints == null) {polyPoints = new List<System.Drawing.Point>();points_cv = new List<OpenCvSharp.Point>();}polyPoints.Add(e.Location);//OpenCvSharp.Point a = new OpenCvSharp.Point(e.Location.X,e.Location.Y);int X0, Y0;ConvertCoordinates(pictureBox1, out X0, out Y0, e.X, e.Y);points_cv.Add(convertToCVPoint(X0,Y0));//foreach (System.Drawing.Point p in polyPoints)//{//    g.FillEllipse(Brushes.Red, new Rectangle(p.X - 2, p.Y - 2, 4, 4));//}pictureBox1.Invalidate();}else if (e.Button == MouseButtons.Right && polyPoints != null){//Pen pen = new Pen(Color.Red, 3);paint = true;pictureBox1.Invalidate();//using (var g = pictureBox1.CreateGraphics()){//g.SmoothingMode = SmoothingMode.AntiAlias;//g.Clear(pictureBox1.BackColor);//using (SolidBrush br = new SolidBrush(Color.FromArgb(100, Color.Yellow)))//{//    g.FillPolygon(br, polyPoints.ToArray());//}//if (polyPoints.ToArray().Length >= 3)//{//    g.DrawPolygon(Pens.Red, polyPoints.ToArray());//    foreach (System.Drawing.Point p in polyPoints)//    {//        g.FillEllipse(Brushes.Red, new Rectangle(p.X - 2, p.Y - 2, 4, 4));//    }//}Mat pic = new Mat(srcImg_0.Size(), MatType.CV_8UC1, Scalar.All(0));//int[] a = polyPoints.ToArray();//            List<OpenCvSharp.Point> pts1 = new List<OpenCvSharp.Point>//{//    new OpenCvSharp.Point(400,400),//    new OpenCvSharp.Point(400,500),//    new OpenCvSharp.Point(500,500),//    new OpenCvSharp.Point(500,400),//    //new OpenCvSharp.Point(400,400)//};//            List<OpenCvSharp.Point> pts2 = new List<OpenCvSharp.Point>//            {//    new OpenCvSharp.Point(10,10),//    new OpenCvSharp.Point(10,150),//    new OpenCvSharp.Point(150,150),//    new OpenCvSharp.Point(150,10),//    //new OpenCvSharp.Point(10,10)//};List<List<OpenCvSharp.Point>> pts = new List<List<OpenCvSharp.Point>>() {points_cv};Cv2.Polylines(pic, pts, true, 255);Cv2.FillPoly(pic, pts, 255);Cv2.Resize(pic, pic, new OpenCvSharp.Size(),0.2,0.2);//Cv2.ImShow("111", pic);Mat pic1 = new Mat();Cv2.Resize(srcImg_0, pic1, new OpenCvSharp.Size(), 0.2, 0.2);Mat ROI = new Mat();Cv2.CopyTo(pic1, ROI, pic);Cv2.ImShow("111", ROI);polyPoints = null;points_cv = null;}}}}public static OpenCvSharp.Point convertToCVPoint(int X,int Y){return new OpenCvSharp.Point(X, Y);}Mat srcImg_0=null;private void button2_Click(object sender, EventArgs e){string imgName = "";if (openFileDialog1.ShowDialog() == DialogResult.OK){imgName = openFileDialog1.FileName;srcImg_0 = new Mat(imgName, ImreadModes.Color);Mat srcImg = srcImg_0.Clone();Bitmap bitmap = BitmapConverter.ToBitmap(srcImg);pictureBox1.Image = bitmap;//防止异常图片//public_img.no_center_img=NoCenterImageGet();}else{MessageBox.Show("读取图片失败", "提示");}}
//坐标系转化private static void ConvertCoordinates(PictureBox pic, out int X0, out int Y0, int x, int y){int pic_hgt = pic.ClientSize.Height;int pic_wid = pic.ClientSize.Width;X0 = x;Y0 = y;if (pic.Image == null) return;int img_hgt = pic.Image.Height;int img_wid = pic.Image.Width;switch (pic.SizeMode){case PictureBoxSizeMode.AutoSize:case PictureBoxSizeMode.StretchImage:X0 = (int)(img_wid * x / (float)pic_wid);Y0 = (int)(img_hgt * y / (float)pic_hgt);break;}}

c#中用鼠标点击事件实现抠图相关推荐

  1. css禁用鼠标点击事件

    1.css禁用鼠标点击事件 .disabled { pointer-events: none; } 转载于:https://www.cnblogs.com/jiangtuzi/p/5728230.ht ...

  2. android 模拟点击localinstrumentation,Android Instrumentation模拟鼠标点击事件

    看了几遍网上的博客一直没有 模拟出鼠标点击事件和按钮事件,后来抱着试试态度再重试的时候终于有所斩获.下面把具体的情况记录一下: 首先我们必须了解类 Instrumentation: Instrumen ...

  3. [css] 怎样用纯CSS实现禁止鼠标点击事件?

    [css] 怎样用纯CSS实现禁止鼠标点击事件? pointer-events: none; 是css3新出现的属性,意思就是禁止鼠标点击事件,当元素中有这一属性时,链接.点击事件统统失效. 个人简介 ...

  4. 【Qt串口调试助手】1.3 - 重写ComboBox下拉框的鼠标点击事件,实现点击下拉框扫描可用串口

    由于ComboBox没有鼠标点击信号,所以如果想实现点击下拉框响应,需要重写ComboBox下拉框的鼠标点击事件.在点击事件中,添加扫描可用串口代码,实现点击下拉框时重新扫描串口.并且下拉框内容输出端 ...

  5. QT之鼠标点击事件学习

    最近在学习点击鼠标事件,在这分享给大家 window.h中的配置 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow& ...

  6. java鼠标点击事件_Java 鼠标点击事件实例

    首先我们应该知道鼠标点击事件怎么实现 其部分代码如下 if (anyEvent.getButton() == MouseEvent.BUTTON1) {} e.getButton()返回值分别为NOB ...

  7. java 鼠标点击按钮事件_Java 鼠标点击事件实例

    首先我们应该知道鼠标点击事件怎么实现 其部分代码如下 if (anyEvent.getButton() == MouseEvent.BUTTON1) {} e.getButton()返回值分别为NOB ...

  8. QT之QLineEdit——实现鼠标点击事件

    QLineEdit添加鼠标点击事件主要分为三步: 重写lineEdit类(MyLineEdit) 添加相应的启动的信号和槽的事件 将使用时的QLineEdit提升为自己写的类 重写lineEdit类 ...

  9. PyQt5 鼠标点击事件(点击响应事件可自定义):鼠标单击、双击、滚轮滚动、释放、移动等

    自己写通了最常用的鼠标事件,具体响应事件,大家可以自定义,实现的效果如下: 具体代码如下,有任何问题,欢迎小伙伴们交流讨论. # -*- coding: utf-8 -*- ""& ...

最新文章

  1. 作业6 分析项目的NABCD和项目的产品Backlog
  2. go mongodb排序查询_【赵强老师】MongoDB中的索引(下)
  3. HarmonyOS之将SVG文件转换为XML文件
  4. (数据科学学习手札45)Scala基础知识
  5. 仿微信选取图片发表朋友圈功能
  6. 【bzoj2060】[Usaco2010 Nov]Visiting Cows拜访奶牛 树形dp
  7. java socket 全双工_java socket实现全双工通信
  8. Linux 命令(138)—— nc 命令
  9. Java springcloud B2B2C o2o多用户商城 springcloud架 (二): 配置管理
  10. ARMv8-A vs ARMv7 Registers
  11. 便携式文件夹加密器 lockdir 5.74
  12. unity商店里下载的资源保存路径
  13. 浏览器设置代理服务器插件SwitchyOmega配置
  14. Learning-based Practical Smartphone Eavesdropping with Built-in Accelerometer综述
  15. Android aab打包
  16. K8s 开先河、技能全栈、业务“无感”,深度解读云原生的这一年
  17. 中国人民大学计算机系孙辉,张静(中国人民大学信息学院计算机系讲师)_百度百科...
  18. Go语言学习十二 变量和常量
  19. 淘汰了80%的Android面试者,搞懂这些直接来阿里入职
  20. iOS 常用第三方库及插件

热门文章

  1. linux实验之文件与文件,linux实验报告文件系统与文件管理.doc
  2. 饼图的引导线怎么加_4步学会EXCEL复合条饼图制作方法,让统计结果更直观!
  3. 21年编程,那些我踩过的坑!
  4. 电路常识性概念(3)-TTL与CMOS集成电路
  5. html文字向上移动10px,HTML文字移动特效代码
  6. redis强一致性_分布式架构一定要有Redis吗?Redis的常见问题我都帮你解答了
  7. ubuntu linux root,Ubuntu 中的 root 用户:你应该知道的重要事情 | Linux 中国
  8. openlayer 图层上下_OpenLayers实现图层切换控件
  9. arcgis 坐标系 2000坐标系_干货 | 关于投影和坐标系那些事,你是否都已还给了老师?...
  10. kettle java 变量传递_kettle的jdk1.7环境变量配置