请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 347|回复: 9

[Halcon实例-02]吸塑盘内产品数量

[复制链接]

21

主题

51

帖子

150

积分
交易币
0

编程一段

Rank: 2

发表于 2019-4-8 13:43:02 | 显示全部楼层 |阅读模式
产品原图:
product.jpg
识别结果图:
2019-04-08_134034.jpg



游客,如果您要查看本帖隐藏内容请回复

回复

使用道具 举报

0

主题

51

帖子

182

积分
交易币
0

编程一段

Rank: 2

发表于 2019-4-8 23:13:22 | 显示全部楼层
占沙发抢先看。
正好有这方面的需求。研究学习。
回复 支持 反对

使用道具 举报

0

主题

51

帖子

182

积分
交易币
0

编程一段

Rank: 2

发表于 2019-4-8 23:16:57 | 显示全部楼层
使用的摄像头有什么要求?普通的视频摄像头能用么?
回复 支持 反对

使用道具 举报

21

主题

51

帖子

150

积分
交易币
0

编程一段

Rank: 2

 楼主| 发表于 2019-4-9 08:03:47 | 显示全部楼层
lvhoo 发表于 2019-4-8 23:16
使用的摄像头有什么要求?普通的视频摄像头能用么?

理论上可以的,使用DirectShow接口,我这没普通摄像头测试。
但普通摄像头在采集帧率及快门速度等有所不及工业相机,针对不同产品还是需要不同的光源达到理想的效果
下面是我这一台入门级的工业相机连接代码
[aardio] 纯文本查看 复制代码
import win.ui;
/*DSG{{*/
mainForm = win.form(text="HALCON-aardio 实例";right=848;bottom=554)
mainForm.add(
button={cls="button";text="产品数量";left=746;top=94;right=833;bottom=140;z=2};
picturebox={cls="picturebox";left=6;top=0;right=726;bottom=540;z=1}
)
/*}}*/

import com;
HOperatorSetX = com.CreateObject("{6ebd90e2-d219-11d2-ade5-0000c00f4ef9}");

mainForm.button.oncommand = function(id,event){
    var ImageOrig =  HOperatorSetX.ReadImage( "product.jpg" );   
    var Width,Height = HOperatorSetX.GetImageSize( ImageOrig );
	var WindowHandle = HOperatorSetX.OpenWindow( 0,0,mainForm.picturebox.width,mainForm.picturebox.height,mainForm.picturebox.hwnd,"transparent","");
	HOperatorSetX.DispObj( ImageOrig , WindowHandle );
	
	HOperatorSetX.SetColor( WindowHandle , "red" );
	HOperatorSetX.SetDraw( WindowHandle , 'margin' );
	HOperatorSetX.SetLineWidth(WindowHandle,3);		
	
	//彩色三通道图像
	var  Red, Green, Blue = HOperatorSetX.Decompose3( ImageOrig );
	//自动阈值分割
	var  Region, UsedThreshold = HOperatorSetX.BinaryThreshold( Red,'smooth_histo', 'dark' );
	//分割后选择的是所需的背景,所以求反一次
	var  RegionComplement = HOperatorSetX.Complement( Region );
	//做一次闭运算
	var  RegionClosing = HOperatorSetX.ClosingCircle( RegionComplement, 3.5 );
	//空洞填充
	var  RegionFillUp = HOperatorSetX.FillUpShape( RegionClosing, 'area', 1, 100 );
	//欧式距离函数的距离变换
	var  DistanceImage = HOperatorSetX.DistanceTransform( RegionFillUp, 'octagonal', 'true', Width, Height );
	//int4转byte
	var  ImageConverted = HOperatorSetX.ConvertImageType( DistanceImage, 'byte' );
	//图像取反
	var  ImageInvert = HOperatorSetX.InvertImage( ImageConverted );
	//增加对比度
	var  ImageScaleMax = HOperatorSetX.ScaleImageMax( ImageInvert );
	//自动阈值分割
	var  Region2, UsedThreshold = HOperatorSetX.BinaryThreshold( ImageScaleMax,'smooth_histo', 'dark' );
	//计算连通区域
	var  products = HOperatorSetX.Connection( Region2 );
	//统计数量
	var prodNum = HOperatorSetX.CountObj( products );
	
	HOperatorSetX.DispObj( Region2 , WindowHandle );

	HOperatorSetX.SetTposition( WindowHandle , 120, 60 );
	HOperatorSetX.WriteString( WindowHandle , "产品数量:"+prodNum );
}

mainForm.show();
return win.loopMessage();

回复 支持 反对

使用道具 举报

2

主题

10

帖子

13

积分
交易币
0

新手入门

Rank: 1

发表于 2019-4-10 14:25:50 | 显示全部楼层
本帖最后由 灶膛红 于 2019-4-10 15:52 编辑

提示没有注册类,估计要装了摄像头的机器才能用吧。
先收藏,找个WEB CAM再试。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

4

积分
交易币
0

新手入门

Rank: 1

发表于 2019-4-23 10:25:26 | 显示全部楼层
使用OCR自动识别
回复 支持 反对

使用道具 举报

0

主题

4

帖子

3

积分
交易币
0

新手入门

Rank: 1

发表于 2019-4-23 21:27:53 | 显示全部楼层
试了一下,普通usb摄像头还真能读,而且IDE直接生成代码,很方便。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

21

积分
交易币
0

新手入门

Rank: 1

发表于 2019-4-25 13:42:33 | 显示全部楼层
look, 多看看
回复 支持 反对

使用道具 举报

0

主题

51

帖子

182

积分
交易币
0

编程一段

Rank: 2

发表于 2019-4-28 21:37:02 | 显示全部楼层
feng 发表于 2019-4-23 21:27
试了一下,普通usb摄像头还真能读,而且IDE直接生成代码,很方便。

能否贴出来分享学习下对应的代码
回复 支持 反对

使用道具 举报

0

主题

10

帖子

13

积分
交易币
0

新手入门

Rank: 1

发表于 2019-5-6 14:37:49 | 显示全部楼层
感谢楼主,找个设备试一试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2019-8-22 09:32 , Processed in 0.109375 second(s), 29 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表