自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (3)
  • 收藏
  • 关注

原创 彩色 Bitmap转换HObject图像

后来查找原因,分析原因,发现是因为Bitmap4字节对齐,非4的整数倍宽度的图像,后面会补0来达到4的倍数。如图像width=202,每行202个字节,实际内存每行后面会补两个字节,宽度变为204个字节。所以重新修改转换代码,在每个末尾进行添加,这部分添加完毕后,经过测试,OK。彩色 Bitmap转换HObject图像。但是发现有问题,变换的图像十分异常,之前已有的代码是这样的。

2024-05-08 13:33:13 548 1

原创 C++:解决MFC界面无响应PeekMessage

在编写MFC程序过程中,会出现点击按钮后,该按钮内部卡住,界面无法刷新的情况。遇到后可以考虑PeekMessage。PeekMessage是一个Windows API函数。该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。和函数PeekMessage不一样的是,GetMessage:从系统获取消息,将消息从系统中移除,属于阻塞函数。当系统无消息时,GetMessage会等待下一条消息。而函数PeekMesssge是以查看的方式从系统中获取消息,可以不将消息从系统中移除,是非阻

2022-05-03 13:26:01 2390

原创 Halcon:通过CFileDialog选择图片

上代码:HObject hImage;//待读取的图像CString strFilter = _T("Image Files (*.bmp)|*.bmp|BMP File (*.bmp)|*.bmp|PNG File (*.png)|*.png|JPG File (*.jpg)|*.jpg|All Files (*.*)|*.*||");//路径中包含的格式CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

2022-03-22 17:24:41 447

原创 C++:同步和异步读写(重叠I/O详解)

1.写C++程序时,会出现一些情况,做此记录举例:类似读取文件先CreateFile,接着再ReadFile或者WriteFile情况1:如果CreateFile时,参数DWORD dwFlagsAndAttributes, 该参数代表文件属性,该参数没有设置为FILE_FLAG_OVERLAPPED(允许对文件进行重叠操作)那么在ReadFile时,就需要等读完数据后(数据的长度是自己指定的),才会返回。假设在WriteFile时,需要一次性写入很多数据,那么需要在数据完全写完,才会返回。

2022-03-04 17:07:50 5571

原创 使用Spy++点击其他程序按钮

1.首先打开VS2019->工具->Spy++2.打开后有以下的界面。接下来需要鼠标左键点击这个查找程序工具,然后鼠标就会变成圆形,移到你想要查询的程序上3.目前移动到了界面上,句柄就能看到了4.假设移动到按钮Button2上5.然后通过Spy++看整个界面的所有按钮的句柄。对应关系如下6.如果想写一个新程序,去对其他程序的按钮进行操作//根据窗口句柄获取EDIT控件的ID,但是这个ID是通过VS工具spy++获取的 HWND hMain = ::GetDlgItem(

2022-01-24 09:17:52 1689

原创 C++获取其他程序内信息

1.根据程序名称获取程序窗口句柄//一个程序获取另一个程序Edit控件的内容 char temp[256]; strTest.clear(); //根据指定程序的标题名获取改程序窗口的句柄 HWND hWnd = ::FindWindow(NULL, L"Test"); if (hWnd!=NULL) { EnumChildWindows(hWnd, EnumWindowsProc, NULL); UpdateData(0); }vector<CString&

2022-01-14 16:30:54 786

原创 C++实现程序的拖拽

针对A程序去拖拽B程序的位置1.首先获取到B程序为主2.执行拖拽 //移动鼠标位置,目的是移动到title位置 ::SetCursorPos(1000, 275); Sleep(50); //左键按下,目的是点击到title mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); //鼠标移动,水平方向位移500,垂直方向位移200 mouse_event(MOUSEEVENTF_MOVE, 500, 200, 0, 0);

2022-01-14 11:32:15 992

原创 C++实现log记录

1.需要在头文件中定义log对象以及控件IDconst int IDC_LISTBOX_LOG = 12345;CListCtrl m_logList;2.在初始化代码中添加CListCtrl控件的初始化代码//获取当前坐标 CRect rcClient; GetClientRect(&rcClient); //设置log控件位置 CRect rcListBox; rcListBox.left = rcClient.left ; rcListBox

2022-01-14 11:06:40 667

原创 C++实现鼠标点击其他程序

1.主要是SendInput函数。代码如下: //初始化 INPUT input = {0}; input.type = INPUT_MOUSE; //dx,dy代表的是进行点击的坐标。下面显示的是(950,150) input.mi.dx = static_cast<long>(65535.0f / (GetSystemMetrics(SM_CXSCREEN) - 1) * 950); input.mi.dy = static_cast<long>(65535.

2022-01-14 10:54:22 3283 1

原创 halcon和C++联合编程

1.首先新建MFC程序2.建立完成后,项目->属性->VC++目录->包含目录 ,修改如下:3.项目->属性->VC++目录->库目录,修改如下:4.项目->属性->链接器->输入->附件依赖项,修改如下:5.在头文件中添加:#include “halconcpp.h”using namespace HalconCpp;6.在代码中添加新建窗口7.接着生成成功。注意安装halcon时是64位还是32位,需要和创建的程序相

2022-01-04 15:34:25 3696

原创 C++:VS2019调用dll

1.直接通过代码加载dll,进行测试首先在头文件中添加函数指针,会方便一点,函数指针的名称随意。假设为TestDll1,TestDll22.加载dll,并且将指针函数指向dll中函数地址3.若是在exe路径下未包含dll,则运行exe时会闪退。...

2021-12-15 14:01:29 2482

原创 C++:VS2019调用lib

1.测试调用lib首先创建一个MFC的对话框程序2.将之前生成的CreateDll.lib和CreateDll.dll拷贝到程序所在路径接着将dll中的函数接口所在的头文件Interface.h也拷贝到该路径下3.这些只是代表拷贝到路径下,并不代表能够使用,需要将这些添加到程序中先将头文件包含到程序中4.在MFC窗口程序中添加一个按钮进行测试,并且在该按钮中增加相应的函数5.这时Interface.h的函数内容需要修改。修改如下:添加CreateDll.lib,函数接口修

2021-12-15 12:05:41 4569

原创 C++:VS2019生成dll和lib

1.首先打开VS2019选择其中的动态链接库,并点击下一步2.接着选择创建新项目的名称和位置3.创建后的项目打开如下4.在pch.h的文件处添加函数接口5.在pch.cpp处添加函数内容6.点击生成—>生成解决方案7.生成后的dll和lib在一开始创建工程的路径下...

2021-12-14 15:15:42 2921

原创 Halcon:相机径向畸变矫正

1.单相机标定的目的:矫正畸变,进行一维和二维的测量2.相机畸变是一种像素差3.标定就是求解相机的内参和外参4.标定板:有圆形和棋盘格的标定板,主要是金属,陶瓷,玻璃的,精度不一样。5.标定板本身的物理尺寸,厚度,圆和圆之间的差距是提前已知的。视野占整个视野的1/3或1/4即可,拍9-16即可。6.手上标定板7*7阵列,相邻的两个圆之间的距离是4mm,使用算子:gen_caltab.()参数1是每行黑色标志圆点的数量参数1是每列黑色标志圆点的数量...

2021-12-14 14:49:07 2143 1

原创 C#: 监测程序占用CPU的情况

1.首先先引用对应的命名空间using System.Diagnostics;2.接着定义一个监测CPU的对象:private PerformanceCounter m_Cpu = null;3.在界面加载的时候获取对应的CPU对象 string strProcessName = Process.GetCurrentProcess().ProcessName; try { m_Cpu = new

2021-08-04 15:47:17 2232

原创 C#:使用Spire.xls写Excel数据

1.百度搜索Free Spire.xls2.下载该文件,下载后如下3.对于压缩文件进行解压4.这里我选择了默认安装5.安装完成后,寻找到对应路径下的dll6.新建一个C#工程,引用该路径下的dll,注意.NET的版本7.引用完成后,在命名空间上添加using Spire.Xls;8.新建一个按钮事件,将写入的代码插入 //假设excel所在路径为D:\\20210802\\123456.excel //获取文件夹名称

2021-08-02 09:06:28 4846

原创 Halcon:计算两条曲线的相关性(皮尔森系数)

1.在做某个项目的过程中,需要检测某个区域产品厚度不一的情况因为要检测其他缺陷,所以用面阵相机,没有用线扫相机图像如下:2.使用创建很多测量句柄,measure_pos,得到很多点,连接成xld,显示如下会出现干扰的情况3.也会出现OK的产品,找到两个边界的情况类似上图所示,红色边缘是干扰边缘,绿色边缘是真实边缘所以想通过找到的两条边界和Demo(边界)做对比假设和Demo的相关性一致,那么说明该边是边界。该边在上,则说明下面区域有缺陷该边在下,则说明上面区域是干扰因为皮尔森相关

2021-03-27 11:14:16 10947

原创 Halcon:Metrology批量测量矩形和圆

处理图如下:原图如下:主要思想:1.准备一次性将图中12个圆和2个矩形都检测出来2.初步确定12个圆的圆心坐标和半径,初步确定两个矩形的中心坐标,角度,长短边长3.创建计量模型4.定义计量模型尺寸5.增加检测矩形和圆形的信息参数6.应用计量模型,获取结果7.显示拟合出的圆,矩形(绿色)。显示卡尺(灰色)。显示所有检测出的边界点(cyan色)。代码如下:*更新窗口dev_update_off ()*显示图像read_image (Image, ‘pads’)*获取图像大小g

2021-03-05 13:47:18 4216

原创 C# :使用is关键字和as关键字,做类型转换

备忘录1.在窗体加载时完善下述代码 private void Form1_Load(object sender, EventArgs e) { //获取桌面宽度 int nDeskWidth = Screen.PrimaryScreen.WorkingArea.Width; //获取桌面高度 int nDeskHeight = Screen.PrimaryScreen.WorkingArea.

2021-02-07 13:34:57 301

原创 C# :修改注册表,从上次关闭位置启动窗体

备忘录1.首先,手动添加Winform窗体关闭的事件代码右击窗体,选择属性:点击右边的小闪电标志2.双击FormClosing事件3.完善窗体关闭的代码 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { RegistryKey point1, point2; //获取注册表的根节点HKEY_CURRENT_USER

2021-02-02 09:50:30 276

原创 C# :设置窗体在屏幕中的位置

用于备忘录新建一个Winform的窗口程序,将窗口位置显示在不同区域1.在窗体上右击属性2.在设置上细看其中的StartPosition如果想将将窗口位置显示在屏幕中央,StartPosition这一项就选择CenterScreen4.如果想将将窗口位置显示在手动设置的区域,StartPosition这一项就选择Manual,并且设置截图最上方的Location的X,Y参数。...

2021-02-02 09:23:39 10608

原创 OpenCV:Knn算法

在用字符识别上使用的训练集6W张图片测试集1W张图片这6W和1W的图像没有重复的Knn:目标:将待测物分类成多个类别输入:待测物(已知类别集合D,其中包含j个已知类别)输出:项目可能的类别。优点:算法简单,易于实现,不需要参数统计,不需要事先训练缺点:KNN计算量特别大,而且训练样本必须存储在本地,内存开销也特别大K的取值(一般不大于20)...

2021-01-19 23:12:09 1871

原创 VS2015+OpenCV的部署

1.OpenCV的网址如下:https://opencv.org/进入该网站后:点击下面的release然后会显示当前最新的OpenCV的版本:选择OpenCV-3.4.13版本下载,点击windows接着就会自动下载:2.下载完成之后,解压到C:\opencv路径下:C:\opencv\sources里面都是源代码,只能看,不能调试C:\opencv\build\include里面包含头文件,2.0之后的都在opencv2.0之后。3.配置环境变量如下:我的电脑->右击属性

2021-01-18 10:56:52 190

原创 halcon联合C#编程,读取并显示图片

1.首先创建一个新的C3的窗体应用程序2.程序创建完成之后,需要加载halcon的窗口3.在工具箱的空白处,右击后选择:添加选择项,然后对于新添加的选择项重新命名。我当前命名的是HalconWindow(随意命名)4.因为还没有加载halcon的dll,所以先引用halcon的dll.这里需要加载这个halcondotnet.dll这个halcondotnet.dll和halcon.dll的路径如下:6.找到这两个dll后,先将这两个dll,放到当前程序的路径下:7.接着引用如下:

2021-01-14 16:48:38 2901 2

原创 Halcon:正弦带通滤波器处理条纹

结果图:原图:主要处理思想:1.图像从空间域变换到频域2.新建一个带通滤波器,处理频域图像3.再从频域图像转换为空间域图像4.形态学面积选择+lines_gauss代码如下:*刷新界面dev_update_off ()*关闭窗口dev_close_window ()*读取图像read_image (Image, ‘surface_scratch’)*图像翻转,相当于每个像素都是255-该灰度值invert_image (Image, ImageInverted)*获取图像

2021-01-14 11:20:21 2346

原创 Halcon:划痕检测

处理图:原图:处理思想:1.均值滤波+动态阈值分割2.特征选择(区域面积)代码如下:*刷新dev_update_off ()*关闭窗口dev_close_window ()读取图像read_image (Image, ‘surface_scratch’)*获取图像宽高get_image_size (Image, Width, Height)*打开窗口dev_open_window_fit_image (Image, 0, 0, Width, Width, WindowID

2021-01-14 08:51:41 2121 5

原创 Halcon:去除墨水,保留纹理

处理图片:代码如下:*刷新dev_update_off ()*关闭窗口dev_close_window ()Scale := [1.0,.65]MinGray := [50,100]for Index := 0 to 1 by 1* 读取图像read_image (Image, ‘plan_’ + (Index + 1)$‘02’)*获取图像宽高get_image_size (Image, Width, Height)*打开窗口dev_open_window (0, 0, Wi

2021-01-13 13:44:24 1341

原创 Halcon:处理纹理图像的缺陷区域

处理图如下:原图如下:主要思想:1.频域处理,构建高斯滤波2.变换为空间域3.图像差分,分水岭算法4.特征选择,能量的选择(缺陷区域能量较小)代码如下:*关闭窗口dev_close_window ()*刷新窗口dev_update_off ()*路径选择Path := ‘lcd/mura_defects_texture_’*读取图像read_image (Image, Path + ‘01’)*获取图像宽高get_image_size (Image, Width,

2021-01-13 09:37:01 2047 1

原创 Halcon:傅里叶变换+差分 求缺陷区域

处理图如下:原图如下:主要思想1.采集图像2.预处理之频域变换(建立背景+高斯滤波)3.图像差分(在空间域处理)4.lines_gauss函数提取线条代码如下:*轻微印痕检测*差分+频域的思想*关闭窗口dev_close_window ()*更新窗口dev_update_off ()*路径定义Path := ‘lcd/mura_defects_blur_’*读取图片read_image (Image, Path + ‘01’)*获取图像大小get_image

2021-01-12 09:47:22 1542 2

原创 Halcon:傅里叶变换(5)去除暗波纹

1.原图如下:通过波纹能够猜测竖直方向上肯定有亮带然后产品摆放额方向也有对应的亮带分别是顺时针30°和顺时针120°方向,也有两个小亮带然后根据长边的变化比短边变化明显一点所以顺时针120°方向的亮带更明显一点2.变换后的频谱图如下:3.使用paint_region,把竖直方向上的亮带屏蔽掉。要注意,竖直方向的亮带几乎都是波纹,所以处理的时候要尽可能的多一点4.再变换到原图,能够看到去除了波纹代码如下:read_image (Image, ‘D:/项目所用图片/11.png’)

2021-01-11 13:47:02 2393

原创 Halcon:傅里叶变换(4)高通低通滤波器

讲一下常用的高通滤波器和低通滤波器低通滤波器:代表低频通过的滤波器,就是中间的低频通过,边缘的高频不通过。正常表现形式就是如下:中间为白色通过区域,背景为黑色不通过区域反傅里叶变换后:边缘,菱角就不清晰了,类似模糊了一样高通滤波器:代表高频通过的滤波器,就是中间的低频不通过,四周的高频通过。正常表现形式就是如下:中间为黑色通过区域,背景为白色不通过区域反傅里叶变换后:边缘出来带通滤波器:类似圆环,将高通和低通部分都不保留,中间的灰度差变化不明显部分进行通过。原图:频域图:能稍微

2021-01-11 13:46:44 8387

原创 Halcon:傅里叶变换求缺陷区域

1.结果图如下:主要思想:1.读取图像2.构建合适的高斯滤波器(低通滤波器)(关键部分)3.从空间域变换到频域,然后用滤波器处理,再变换回空间域4.Blob分析+特征选择(区域)5.显示结果代码如下:*频域+空间域检测缺陷dev_update_off ()*关闭窗口dev_close_window ()*读取图像read_image (Image, ‘plastics/plastics_01’)*获取图像宽高get_image_size (Image, Width, He

2021-01-11 11:12:40 972

原创 Halcon:傅里叶变换(3)去除波纹

原图:目标:删除其中的波纹,不损坏原图如果从空间域上检测,难度比较大现在用频域做对应变换先变换成频谱图:变换后,能够看见原图波纹梯度是存在于顺时针45度方向。所以在顺时针45度方向上有亮度变换。就有很多亮度图。目前使用的是paint_region.直白的将某个区域整个染成黑色。将噪声波纹的傅里叶变换的区域,用黑色区域填充,代表就是过滤了波纹。但是清晰度不够了,因为中间白色中心点有一部分是图像本身变换后形成的,所以中间多保留一些,就可以更清晰一点。...

2021-01-11 08:54:43 4066

原创 Halcon:傅里叶变换(2)3种示意图

如果原图是个背景为黑色,中心是个白色的圆,那么图片显示如下:原图:变化是对称的,且各个方向是均等的,所以傅里叶变换后如下:每个方向都有亮点,并且每个方向的变化都是均等的,所以类似水波纹。中间是低频,边缘是高频。通过这样的频谱,能够预测到肯定有圆。傅里叶变换图片:如果原图变成了菱形,显示如下原图:通过原图,能看出来斜对角的线是由黑过渡到亮,再由亮过渡到黑,所以可以预估到斜对角有个亮带。所以方向:频谱的亮带方向垂直于边界线。宽度:能看出来斜对角的线是由黑过渡到亮,再由亮过渡到黑,所以

2021-01-08 16:30:04 2302 1

原创 Halcon:傅里叶变换(1)初步讲解

傅里叶变换的核心是从时域到频域的变换。时域:音频的波形图就是时域理解为横轴是事件,纵轴是振幅[-1,1]在图像上,经常看到的就是时域下的图片频域:横轴是频率(Hz),纵轴是声音大小(dB)。如何变换,用到的是傅里叶变换。想知道对应的数学公式,可以看看知乎的帖子https://www.zhihu.com/question/19714540图像变化的公式是...

2021-01-08 16:06:04 2876

原创 Halcon:测量拟合法检测缺陷

图像处理结果:主要思想:1.Blob分析,就是实际的边界和拟合的距离2.对于所有实际边界的点,测试到拟合矩形的距离3.先排除4个角落的点,然后再测试中间的点到拟合矩形的距离代码如下:*更新窗口dev_update_off ()*读取图像read_image (Image, ‘punched_holes’)*获取图像大小get_image_size (Image, Width, Height)*关闭窗口dev_close_window ()*打开窗口dev_open_window

2021-01-07 16:32:41 2104

原创 Halcon:刮胡刀锯齿缺陷检测

图像处理结果:主要思想:1.创建模板,建立检测区域2.在待检测区域,使用measure_pairs检测每一对锯齿的距离3.使用距离进行OK,NG判断代码如下:*基于形状匹配的检测*测刮胡刀的锯齿,断还是没断USING_TRANSLATE_MEASURE := 0dev_update_window (‘off’)*读取图像read_image (ModelImage, ‘razors1’)*获取图像的数据信息get_image_pointer1 (ModelImage, Pointe

2021-01-07 14:53:46 1938 1

原创 Halcon:药品液位高度检测

图像处理结果:主要思想:1.采集图像2.用模板匹配定位3.通过模板匹配,找到药品液位高度的参考线4.以模板匹配找到的横坐标为待测区域横坐标,以模板匹配找到的纵坐标上移135个像素为纵坐标。以这两点为中心,形成宽度20,高度75的测量矩形。在这个测量矩形区域里面找液面高度5.|找到的液面高度和参考线的差值| > 15个像素就算不合格6.显示NG和OK区域*关闭窗口dev_close_window ()*更新dev_update_off ()*读取图片read_image

2021-01-07 09:55:04 3516

原创 Halcon:PCB缺陷检测

图像处理结果:主要思想:*Blob+差分+特征Blob:使用灰度值的开运算图像A,使用灰度值的闭运算图像B差分:A-75>B,选择其中暗的,A+75<B,选择其中亮的特征:可以再使用面积这样的参数进行筛选*对于打光要求很高,背景要求高,要光照稳定*读取图像read_image (Image, ‘pcb’)*关闭窗口dev_close_window ()*获取读取图像的宽高get_image_size (Image, Width, Height)*打开窗口dev_ope

2021-01-06 14:50:32 2750 1

原创 Halcon:网格缺陷检测

图像处理结果:主要思想:Blob(局部二值化)+特征Blob:使用均值滤波加动态阈值分割,选取了待测区域特征:计算出NG区域的像素值,经过经验值的判定,选择>500像素值的区域为NG区域dev_update_window (‘off’)*读取图像read_image (Image, ‘plastic_mesh/plastic_mesh_01’)dev_close_window ()*获取图像的大小get_image_size (Image, Width, Height)*打开

2021-01-06 14:49:48 1213

文件是加密的,别下载!!!

MFC的框架,基于socket的Server和Client,不是基于CSocket的。Client和Server都有

2024-06-06

Spire的NET4.0的dll

Spire.XLS的dll

2021-08-02

NPOI 2.1.1的dll

NPOI是一个开源的C#读写Excel、WORD等微软组件文档的项目。

2021-08-02

HALCON算子集合

halcon相关

2017-06-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除