C# opencvSharp实现鼠标移动选择感兴趣区域(ROI)主要通过鼠标响应事件来实现。

1.鼠标按下响应 MouseDown()

获取鼠标按下的开始坐标。

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e){RectStartPoint = e.Location; //获得鼠标按下的pictureBox上坐标Invalidate();blnDraw = true;//判断标志}

2.鼠标移动响应 MouseMove()

获得感兴趣区域框大小,显示感兴趣区域框以及坐标转换到原图像上。

private void pictureBox1_MouseMove(object sender, MouseEventArgs e){if (blnDraw){ if (e.Button != MouseButtons.Left)//判断是否按下左键{return;}System.Drawing.Point tempEndPoint = e.Location; //记录框的位置和大小//pictureBox上开始点坐标Rect.Location = new System.Drawing.Point(Math.Min(RectStartPoint.X, tempEndPoint.X),Math.Min(RectStartPoint.Y, tempEndPoint.Y));//pictureBox上矩形大小Rect.Size = new System.Drawing.Size(Math.Abs(RectStartPoint.X - tempEndPoint.X),Math.Abs(RectStartPoint.Y - tempEndPoint.Y));pictureBox1.Invalidate();// 最后点位置int X0, Y0;Utilities.ConvertCoordinates(pictureBox1, out X0, out Y0, e.X, e.Y);//在控件中textBox1.Text = Convert.ToString("pictureBox最后点坐标" + e.X + "  ," + e.Y); //pictureBox 上终点坐标textBox2.Text = Convert.ToString("pictureBox开始点坐标" + Rect.X + "  ," + Rect.Y); //开始点坐标textBox3.Text = Convert.ToString("pictureBox的Width" + Rect.Width + "  ," + Rect.Height);//大小//Create ROI 感兴趣区域Utilities.ConvertCoordinates(pictureBox1, out X0, out Y0, RectStartPoint.X, RectStartPoint.Y);int X1, Y1;Utilities.ConvertCoordinates(pictureBox1, out X1, out Y1, tempEndPoint.X, tempEndPoint.Y);//感兴趣区域 左上点坐标-宽-高RealImageRect.Location = new System.Drawing.Point(Math.Min(X0, X1),Math.Min(Y0, Y1));RealImageRect.Size = new System.Drawing.Size(Math.Abs(X0 - X1),Math.Abs(Y0 - Y1));textBox4.Text = "原图像上最后点坐标: X:" + X0 + "  Y:" + Y0;textBox5.Text = "原图像上RealImageRect: X:" + RealImageRect.X + "  Y:" + RealImageRect.Y; // 原图像-左上点坐标textBox6.Text = "原图像上RealImageRectSize: X:" + RealImageRect.Width + "  Y:" + RealImageRect.Height; // 原图像-大小Rect tmp_Rect = new Rect(RealImageRect.X,RealImageRect.Y, RealImageRect.Width, RealImageRect.Height);ImageROI = new Mat(img, tmp_Rect);//新建一个mat,把roi内的图像加载到里面去。//Cv2.ImWrite("4.jpg",ImageROI);  //保存         }}

3.鼠标抬起响应 MouseUp()

将感兴趣区域在pictureBox2控件上显示。

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e){// mouseUp 结束以后 将图像显示在pictureBox2控件中pictureBox2.Image = ImageROI.ToBitmap();/***************************************/blnDraw = false; //结束绘制            }

4.重绘响应 Paint()

感兴趣的框的绘制。

        private void pictureBox1_Paint(object sender, PaintEventArgs e){if (blnDraw){if (pictureBox1.Image != null){if (Rect != null && Rect.Width > 0 && Rect.Height > 0){e.Graphics.DrawRectangle(new Pen(Color.Red, 1), Rect);//重新绘制颜色为红色}}}}

5.坐标转换

在本pictureBox 属性中sizeMode选择为 StretchImage,输入pictureBox控件上坐标转换为图像上实际的大小。

 public class Utilities{//坐标转换/*************************************** 图片左边转换,* Input输入: pictureBox 坐标X,Y* Output输出: Image 图像上对应的坐标**************************************/public 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;int img_hgt = pic.Image.Height;int img_wid = pic.Image.Width;X0 = x;Y0 = y;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;}}}

6.结果显示

C# opencvSharp实现鼠标移动选择感兴趣区域(ROI)相关推荐

  1. OpenCV-C++选择、提取感兴趣区域(ROI区域)【附用鼠标选取ROI区域的代码】

    在图像处理中,我们常常要对某个区域进行选择.提取,然后对这个区域进行单独分析.处理.显示. 这样的区域我们称为叫ROI区域,英文全称为Region of interest,中文名为"感兴趣区 ...

  2. Python-OpenCV选择、提取感兴趣区域(ROI区域)

    Python-OpenCV选择.提取感兴趣区域(ROI区域) 在图像处理中,我们常常要对某个区域进行选择.提取,然后对这个区域进行单独分析.处理.显示. 这样的区域我们称为叫ROI区域,英文全称为Re ...

  3. C/C++ OpenCV设置感兴趣区域ROI

    设置感兴趣区域(ROI,region of interest),来专注或者简化工作过程,也就是从图像中选择一个图像区域,这个区域是 图像分析所关注的重点.我们圈定的这个区域,以便进行进一步处理 定义R ...

  4. ITK:在一幅图像中提取感兴趣区域ROI

    ITK:在一幅图像中提取感兴趣区域ROI 内容提要 输出结果 C++实现代码 内容提要 在给定图像中提取给定的关注区域(ROI) 输出结果 C++实现代码 #include "itkImag ...

  5. python二值化 感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法

    方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...

  6. python提取图片感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法

    方法一:使用轮廓 步骤1 """src为原图""" ROI = np.zeros(src.shape, np.uint8) #感兴趣区域RO ...

  7. matlab如何手动选择图像目标区域,如何用MATLAB实现感兴趣区域ROI的选取

    描述 感兴趣区域 感兴趣区域(Regions of Interest,ROI)这一概念,是指图像中最能引起用户兴趣.最能表现图像内容的区域.感兴趣区域(Regions of Interest,ROI) ...

  8. 使用 OpenCV 和 Tesseract 对图像中的感兴趣区域 (ROI) 进行 OCR

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,我们将使用 OpenCV 在图像的选定区域上应用 O ...

  9. OpenCV精进之路(十一):感兴趣区域ROI和logo添加技术

    在图像处理领域,有一个非常重要的名词ROI. 什么是ROI? 它的英文全称是Region Of Interest,对应的中文解释就是感兴趣区域. 感兴趣区域,就是我们从图像中选择一个图像区域,这个区域 ...

最新文章

  1. git如何忽略已经提交的文件 (.gitignore文件无效)
  2. 1.2 日期/时间的程序
  3. php军事网站源码,军事网站的设计与实现(PHP+MYSQL)(含录像)
  4. 【LeetCode】剑指 Offer 06. 从尾到头打印链表
  5. app、web和接口测试测试流程
  6. php xml 接口调用,php的SimpleXML方法读写XML接口文件实例解析
  7. find命令过滤 no such_Linux中find命令的用法入门
  8. Apple 如何知道你使用了私有API
  9. 删除python读取的txt每一行尾部的\n
  10. android版信用卡还款提醒器
  11. 注册表删除windows开机启动项
  12. html 三色渐变色,CSS3常用的几种颜色渐变模式总结现
  13. Saliency Detection: A Spectral Residual Approach
  14. RxJS 6 —— operators
  15. java开发一般用se,用大白話聊聊JavaSE
  16. 谷歌表格图表 横坐标 滚动_如何将图表从Google表格同步到文档或幻灯片
  17. 虚拟机服务器磁盘扩容步骤,vmware ESXi 虚拟机扩容磁盘空间
  18. # 2021-01-03 #「Jenkins Pipeline」- expected to call xxx but wound up catching xxx
  19. 算法——和为K的连续子数组
  20. 需求工程:软件建模与分析 读书笔记二

热门文章

  1. OpenJDK 6b19现在可用
  2. 看了阿里软测工程师,总结的软件测试面试“圣经”,拿下5个offer
  3. 12-19个月阅读书目推荐(BY 丹丹)
  4. SAP S4 HANA信贷管理之信贷未清表
  5. smoke.js是一款基于HTML5 Canvas的逼真烟雾特效js插件。通过该js插件,可以非常轻松的在页面中制作出各种烟雾效果。...
  6. 用友云亮相华为生态伙伴大会
  7. ie加载项存在残留是什么_ie删除加载项,包括一项和多项两种情况
  8. 案例:模拟京东快递查询
  9. python引入包pulp_用python的pulp库解决线性规划问题
  10. 美国马里兰州劳工部曝出数据泄露事件,或涉及近8万居民