using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
namespace Auto_Detection_System
{
public partial class FormDrawROI : Form
{
public FormDrawROI()
{
InitializeComponent();
}
private System.Drawing.Point rectStartPoint, rectEndPoint;
public bool b_CreateModel = false;
bool b_DrawRoi;//判断Roi区域绘制
Rect roiRect;
//坐标转换 //解决拉伸问题
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;
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;
}
}
private void picBox_MouseDown(object sender, MouseEventArgs e)
{
if (true)
{
if (e.Button == MouseButtons.Left)
{
rectStartPoint = e.Location; //获得鼠标按下的pictureBox上坐标
Invalidate();
b_DrawRoi = true;//判断标志
}
else if (e.Button == MouseButtons.Right)
{
//roiImage = new Mat(srcImage, roiRect);
//templateImgContours = ImageTemplateContours(roiImage);
b_DrawRoi = false; //结束绘制
rectStartPoint = rectEndPoint;
pictureBox2.Refresh();//消掉画的框
}
}
}
private void picBox_MouseMove(object sender, MouseEventArgs e)
{
if (b_DrawRoi)
{
if (e.Button != MouseButtons.Left)//判断是否按下左键
{
return;
}
rectEndPoint = e.Location; //记录框的位置和大小
pictureBox2.Invalidate();
// 最后点位置
int X0, Y0;
ConvertCoordinates(pictureBox2, out X0, out Y0, e.X, e.Y);
//Create ROI 感兴趣区域
ConvertCoordinates(pictureBox2, out X0, out Y0, rectStartPoint.X, rectStartPoint.Y);
int X1, Y1;
ConvertCoordinates(pictureBox2, out X1, out Y1, rectEndPoint.X, rectEndPoint.Y);
roiRect = new Rect(Math.Min(X0, X1), Math.Min(Y0, Y1), Math.Abs(X0 - X1), Math.Abs(Y0 - Y1));
}
}
private void picBox_Paint(object sender, PaintEventArgs e)
{
if (rectStartPoint.Equals(rectEndPoint)) return;
e.Graphics.DrawRectangle(System.Drawing.Pens.Red, rectStartPoint.X, rectStartPoint.Y, rectEndPoint.X - rectStartPoint.X, rectEndPoint.Y - rectStartPoint.Y);
}
}
}
相关推荐
HALCON联合C#检测表面缺陷——Halcon窗口画ROI
接上一节,这一节。我们讨论在HALCON窗口画ROI的初级版本,后期我们再优化,初级版本只是画ROI,ROI的并集差集等,后期我们再优化ROI和图片同步缩放移动等。 这里我要申明一下,所有的代码都是初级版本,比较容易理解的版本,在这个版本上我们可以扩展很多版本包括界面,这里只有一个主界面放了tabcontrol,我们也可以创建很多个FORM,分为主form,设置form等。针对于代码优化,因为有些代码会重复写很多遍,针对于这样的代码我们可以直接封装起来,这样调用就会很方便。 首先我们到设置界面,创建
c#在pictureBox控件上绘制多个矩形框及删除绘制的矩形框
在pictureBox上每次只绘制一个矩形框,绘制下一个矩形框时上次绘制的矩形框取消,代码如链接:https://www.cnblogs.com/luxiao/p/5625196.html 在绘制矩形框时要在程序中添加鼠标相应的事件MouseDown、MouseUp、MouseMove、Paint。 绘制矩形框的代码如下: 1 Point start, end;//绘...
机器视觉-C#&C++ ROI交互控件以及图形显示
控件主要使用DispImgCtrDll.dll库,整个库支持各种ROI交互和图形显示。 画圆,画圆环,画线,画线段,画Mark,画多边形,画矩形,画旋转矩形,画文本
【C#绘制区域】C# pictruebox 划线绘制区域
C# 利用pictruebox 绘制区域
C#Halcon图像ROI编辑工具控件
实现的功能: 1.手动选择打开的文件。 2.清空显示。 3.平移图像 4.放大图像 5.缩小图像 6.指针选择ROI 7.ROI-画线 8.ROI-画矩形 9.ROI-画任意角度矩形 10.ROI-画圆 11.ROI-画椭圆 12.删除选中ROI 13.删除所有ROI 14.刷新界面显示 15.以.hobj格式保存图像ROI 17.ROI选中后的右键菜单功能 1.设置ROI颜色,支持红绿蓝黄四种颜色。 2.设置ROI线样式。支持点样式和连续样式。 3.清空所有ROI
C# 图形绘制、可绘制Roil,绘制可调整Roi 7、可查看当前鼠标位置处的图像坐标和像素点RGB值
1、输入接口多,支持的输入类型有Bitmap(图像),byte[](图像数据), Intptr(图像数据的地址)等。 2、可直接在线程里执行图像显示,不需要使用委托。 3、可以对图像进行放大缩小平移。 4、可用预览图调节图像显示区域。 5、可轻松进行图形绘制。 6、可绘制Roil,绘制可调整Roi。 7、可查看当前鼠标位置处的图像坐标和像素点RGB值。
C# 在picturebox上 画roi区域
思路: 设变量bdraw ,按下时鼠标的相对坐标 ,rect为roi的矩形大小 鼠标按下时,bdraw=true ,鼠标移动时计算rect 鼠标抬起时 bdraw=false,然后再paint中画矩形就ok
2.4 C#中显示控件BDPictureBox 的实现-ROI交互续2
2.4 C#中显示控件BDPictureBox 的实现----ROI交互续2
C#之在PictureBox控件上画点
C#之在PictureBox控件上画点 如何在PictureBox控件上实现鼠标每左击一次就会画一个点呢?这里总结了两种方法。 首先在窗体上插入PictureBox控件和一个Button按钮,当点击按钮后,鼠标进入PictureBox控件中,每左击一次画一个点。 第一种方法: 利用GDI+,代码如下: private string sType;//用来记录button的Name private void btnDrawPoint_Click(object sender, E
C#控件picturebox实现图像拖拽和缩放
主要为大家详细介绍了C#控件picturebox实现图像拖拽和缩放,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Python量化交易实战:从零搭建你的第一个多因子选股模型(附完整代码)
本文是一份详细的Python量化交易入门实战指南,手把手教你从零搭建第一个多因子选股模型。内容涵盖环境配置、数据获取、因子挖掘与有效性检验、多因子合成以及完整的策略回测与绩效评估,并附有可直接运行的完整代码,帮助初学者快速掌握量化交易的基本概念与实践流程。
自定义窗口交互控件:绘制多个ROI并修改
图像平移 缩放 ROI绘制 修改
BeikeShop跨境电商独立站系统V1.5.0免授权全开源版
BeikeShop 一款开源好用的跨境电商系统,BeikeShop 是基于 Laravel 开发的一款开源商城系统,主要面向外贸/跨境电商行业提供商品管理、订单管理、会员管理、支付、物流、系统管理等功能。BeikeShop商城 Beike多语言商城 多货币商城B2C商城系统 代码100%开源 PHP商城系统 H5/PC商城 跨境电商系统 跨境商城系统 电商商城系统 Laravel 9 框架插件化开发,MVC架构 支持插件市场。Event 机制实现Hook功能,自定义可视化装修。
C#上位机项目实战——exe项目调试更改dll中源代码
我们有时候自己封装了一个C#的dll,然后引用了这个dll里面的方法,当我们发现这个方法有问题的时候,可以通过一些手段进入到这个dll的方法中进行单步调试,从而找到错误的原因,本文使用的是Visual Studio2019
AI量化投资开源平台——Qlib(微矿)的学习使用笔记(随缘更新)
Qlib 涵盖了量化投资的全过程,为用户的 AI 算法提供了高性能的底层基础架构,从框架设计上让用户可以更容易地应用 AI 算法来辅助解决量化投资的各个关键问题(例如 Alpha 预测,风险预测,市场动态性建模)。本文旨在记录一些面向初学者的基础内容。
夸克缓存视频合并小工具
原理 使用windows的命令行的copy命令来合并 copy /b 0+1+2+3 new.ts 分析缓存目录结构,发现都是一个m3u8文件带一个同名文件夹 所以分析m3u8并把原来的路径换成这个缓存文件夹路径并按顺序合并即可。 其中碰到的难点是Qprocess在windows不好使,索性直接存成.bat批处理文件再执行 还有就是中文问题,具体在代码里都说了。 代码 (环境Qt5.7.0) 这是mainwindow.h #ifndef MAINWINDOW_H #defin.
C#上位机项目实战——上位机与汇川H5U系列PLC通信
汇川PLC在工业自动化领域的使用率越来越高,所以从事上位机掌握与汇川PLC的通信成为了必须要掌握的技能,本文讲解如何在没有真实PLC的情况下搭建仿真测试环境,以及如何使用马工开发的专用与PLC通信的MgCommunication通信库实现数据读写
华为MA5620配置宽带及语音实例
华为EPON配置实例1、公共部分和宽带PPPOE部分用串口用户名密码root/mduadminMA5620E>enableMA5620E#configMA5620E(config)#MA5620E(config)#sysnamebigcow/给设备起名字/****之前为公共部一、建vlan和地址bigcow(config)#vlan100...
c#-OpenCvSharp-roi区域(截取和掩码)附源码
仅在鼠标移动事件中加入掩码操作,感觉代码还有优化的地方,后面会回头继续优化。各位读者有对代码进行优化的话可以联系我,一起交流学习,作为初学者,我还要很多需要学习的地方。根据前两篇博客roi截图和掩码操作进行总结优化,涉及到的知识点讲解都在两篇文章中,这里不多加赘述,该文章仅作为总结。
用Arduino+ESP32复现TDOA定位:低成本实现厘米级精度的完整教程
本文提供了一套利用Arduino和ESP32平台,结合NRF24L01+模块与GPS/PPS时间同步方案,低成本复现高精度TDOA(到达时间差)定位系统的完整教程。教程详细阐述了从硬件选型、天线阵列设计、时间同步实现到核心算法与多径抑制的实战步骤,旨在帮助开发者和硬件爱好者以可控成本实现厘米级精度的定位演示系统。
vivado2020.1使用vitis生成QSPI启动文件报错
在使用vivado2020.1使用vitis,生成QSPI启动文件时会报错,data2mem命令无法识别,这是因为data2mem是xilinx7series芯片的命令,当使用ultrascale/ultrascale+芯片时则需要使用updatemem命令,这或许是vitis的一个bug吧,明明选择的是ultrascale的芯片,却一直调用打她mem命令,挺麻烦的,需要手动执行,在XSCT console窗口执行的命令如下: updatemem -force -meminfo \ F:/xc7z35t/x
C# 实现图片上下页切换,绘制ROI区域
【代码】C# 实现图片上下页切换,绘制ROI区域。
基于MATLAB编程的LSTM的时间序列预测
时间序列预测,回归分析,LSTM详细原理
C#中如何调整图像大小
1.首先要获取你想要调整大小的图像: string path = Server.MapPath(“~/Images”); System.Drawing.Image img = System.Drawing.Image.FromFile(string.Concat(path,”/3904.jpg”)); 2.将图像转换为Bitmap: Bitmap b = new Bitmap(img); ...
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
C#使用SnsPictureBox.dll绘制矩形和可调节矩形
C#使用SnsPictureBox.dll绘制可调节矩形。支持响应式和等待式,支持不可调节矩形和可调节矩形。
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
3115



被折叠的 条评论
为什么被折叠?



