HALCON查找圆心C++实现
***HALCON源码见:***HALCON根据形状查找圆心
下面是生成修改的c++代码:
void CPropBoundset::OnBnClickedBtnReadcircle()
{// TODO: 在此添加控件通知处理程序代码// TODO: 在此添加控件通知处理程序代码HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB;HObject ho_ImageA, ho_MultiChannelImage, ho_Mean, ho_Seg;HObject ho_SegFillUp, ho_segConnect, ho_SelectedRegions;HObject ho_Circles, ho_ObjectSelected;// Local control variablesHTuple hv_AcqHandle, hv_Channels, hv_Width, hv_Height;HTuple hv_WindowHandle, hv_D, hv_Row, hv_Column, hv_Radius;HTuple hv_Area, hv_Row1, hv_Column1, hv_Number, hv_FileHand;HTuple hv_i;HTuple hv_r, hv_c, hv_rds;CFIRADlg* pMain = (CFIRADlg*)(AfxGetApp()->m_pMainWnd);if (pMain->m_hDevice == NULL) {MessageBoxA("请先打开设备!");return;}//2)三通道图像转换GenImageInterleaved(&ho_Image, (long)(pMain->m_pBufferRGB), "rgb", WIDTH, HEIGHT, 0, "byte", 0, 0, 0, 0, -1, 0);//竖直镜像MirrorImage(ho_Image, &ho_Image, "row");
///一般来说,坐标系的原点在左下角,但是HALCON的坐标原点在左上点,所以,在C++中需要进行转换///*----------------------------------------下面的程序是找圆心用来标定的-----------------------------------------*/CountChannels(ho_Image, &hv_Channels);if (0 != (hv_Channels == 3)){Rgb1ToGray(ho_Image, &ho_Image);//真彩色转灰度图}else if (0 != (hv_Channels == 4)){Decompose4(ho_Image, &ho_ImageR, &ho_ImageG, &ho_ImageB, &ho_ImageA);Compose3(ho_ImageR, ho_ImageG, ho_ImageB, &ho_MultiChannelImage);Rgb1ToGray(ho_MultiChannelImage, &ho_Image);}//获取图像宽高GetImageSize(ho_Image, &hv_Width, &hv_Height);dev_open_window_fit_image(ho_Image, 0, 0, -1, -1, &hv_WindowHandle);set_display_font(hv_WindowHandle, 16, "mono", "true", "false");if (HDevWindowStack::IsOpen())DispObj(ho_Image, HDevWindowStack::GetActive());//动态二值化hv_D = 1;MeanImage(ho_Image, &ho_Mean, (hv_D * 2) + 1, (hv_D * 2) + 1);DynThreshold(ho_Image, ho_Mean, &ho_Seg, 2, "light");FillUp(ho_Seg, &ho_SegFillUp);Connection(ho_SegFillUp, &ho_segConnect);//找矩形SelectShape(ho_segConnect, &ho_SelectedRegions, ((HTuple("area").Append("rectangularity")).Append("inner_radius")),"and", ((HTuple(500).Append(0.5)).Append(5)), ((HTuple(2500).Append(1)).Append(25)));//求出最小外接圆的半径和中心点SmallestCircle(ho_SelectedRegions, &hv_Row, &hv_Column, &hv_Radius);//求出圆的面积和中心点可以不用AreaCenter(ho_SelectedRegions, &hv_Area, &hv_Row1, &hv_Column1);//数量统计CountObj(ho_SelectedRegions, &hv_Number);if (0 != (hv_Number < 1)){disp_message(hv_WindowHandle, "未找到", "window", 12, 12, "black", "true");return;}//画圆if (HDevWindowStack::IsOpen())DispObj(ho_Image, HDevWindowStack::GetActive());GenCircle(&ho_Circles, hv_Row, hv_Column, hv_Radius);if (HDevWindowStack::IsOpen())DispObj(ho_Circles, HDevWindowStack::GetActive());//创建EXCEL文件OpenFile("D:/halcon_data/data.xls", "output", &hv_FileHand);//循环每一个圆{HTuple end_val60 = hv_Number;HTuple step_val60 = 1;for (hv_i = 1; hv_i.Continue(end_val60, step_val60); hv_i += step_val60){SelectObj(ho_SelectedRegions, &ho_ObjectSelected, hv_i);OpenFile("D:/halcon_data/data.xls", "append", &hv_FileHand);//第一行第一列写入a,并换列FwriteString(hv_FileHand, HTuple(hv_Row[hv_i - 1]) + "\t");//第一行第二列写入1,并换行FwriteString(hv_FileHand, HTuple(hv_Column[hv_i - 1]) + "\n");pMain->centerfcalib[hv_i - 1].y = hv_Row[hv_i - 1];pMain->centerfcalib[hv_i - 1].x = hv_Column[hv_i - 1];CloseFile(hv_FileHand);}}
}
HALCON查找圆心C++实现相关推荐
- HALCON查找圆心
HALCON根据形状查找圆心 在场地上放置长方形块,寻找他们的圆心并且返回像素坐标 HALCON代码: * Image Acquisition 01: Code generated by Image ...
- html圆形圆心坐标,halcon找圆心坐标(拟合圆算子详解)
Contours(in):输入轮廓 Algorithm(in):拟合圆的算法 MaxNumPoints(in):用于计算的最大轮廓点个数 MaxClosureDist(in):一个轮廓的末尾点最大间距 ...
- 工业视觉需要时可抄的代码---持续更新
1.批量访问图片,等待键盘 for (int i = 2; i <= 23;){if (KEY_DOWN('S')){std::string path = "";char t ...
- STM32识别圆——色块追踪法
前言 识别圆采用OpenCV来做比较简单,可以用HoughCircles函数,但是如何在内存和资源都很紧张的STM32上面实现圆识别算法,是本文的写作目的.本文的算法采用Python实现,不采用库函数 ...
- halcon获取图像中心点_关于Halcon的复杂图形中心点查找
上面是一张比较复杂的图形,我们希望通过Halcon一系列的算子进行处理,查找到星点交叉处的中心点. mean_image (Image, ImageMean, 41, 41) 将图片进行均值处理,让分 ...
- Halcon圆查找功能简介
版权声明:本文为博主原创文章,未经博主允许不得转载. Halcon基于卡尺的圆查找功能主要会用到:create_metrology_model.add_metrology_object_circle_ ...
- 基于halcon的直线查找之卡尺
我这人比较懒得罗里吧嗦,基本都是直接说两点:why?how? 基于halcon的直线查找之卡尺 直线的检测在halcon中主要有两种方式:直线拟合和卡尺直线.这里分享卡尺方法,拟合请移步:直线拟合 直 ...
- C#调用Halcon并输出圆心坐标
编写Halcon代码 1.使用的示例图片如下: 2.编写Halcon算法用于计算左上角圆环的圆环内圆心坐标 部分代码如下: dev_close_window () read_image (Image, ...
- 使用halcon将一个圆上的点拟合成圆形并且求出圆心
我们在自动化贴装机标定过程中,需要计算吸头的旋转中心位置.我们一般使用的方法是使用模板匹配,做一个模板,吸头旋转一个角度寻找模板一次,通过多次旋转求取吸头的旋转中心. 使用halcon实现 publi ...
最新文章
- MySQL主主配置说明
- 这个假发太逼真!GAN 帮你换发型,alignment 步骤去掉生硬感
- 社交媒体分析-恶意内容自动检测相关论文
- mysql 5.5 5.6 主从_mysql5.6+主从集的版本号(mysql5.5主机和从机载带后,5.5在设置有一定的差距)...
- php定位和天气,基于thinkphp实现依据用户ip判断地理位置并提供对应天气信息的应用...
- Unix——optarg与getopt的用法
- 这种玩法闻所未闻,利用python编程自定义QQ的在线状态
- mysql 自动备份发送,Centos定时自动备份MySQL数据库并发送至指定邮箱
- python基础系列教程——Python中的编码问题,中文乱码问题
- pkg_resources.DistributionNotFound: The 'psutil=5.6.1; platform_python_implementation== 报错解决
- Java实习生的一天
- APF有源滤波器仿真,三相三线制 谐波电流检测模块基于p-q方法,ip-iq等方法
- Flask debug模式算pin码
- MATLAB人体行为检测与识别
- 嵌入式linux软件如何进行数据参数保存
- /home/ljx/miniconda3/compiler_compat/ld: cannot find crtbeginS.o: 没有那个文件或目录
- 去看刘晓庆演的话剧《武则天》
- ARM服务器安装docker-compose
- QQ2005 SP5貌似不错
- php免费开源多用户商城,开源php多用户商城系统好不好?