aardio调用halcon采集摄像头

By admin at 2018-05-08 • 0人收藏 • 472人看过
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=969;bottom=646;parent=...)
winform.add(
button={cls="button";text="开启";left=31;top=549;right=193;bottom=635;z=1};
button2={cls="button";text="关闭";left=208;top=549;right=370;bottom=635;z=2};
picturebox={cls="picturebox";left=0;top=0;right=970;bottom=535;z=3}
)
/*}}*/

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

import console
console.open()

var AcqHandle = HOperatorSetX.OpenFramegrabber( 'DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '', 0, -1 );
HOperatorSetX.GrabImageStart( AcqHandle , -1 );
var Image = HOperatorSetX.GrabImageAsync( AcqHandle , -1 );
//获取图像宽和高
var Width , Height = HOperatorSetX.GetImageSize( Image );
console.log(Width , Height)
//调整画面大小和图像一致
var WindowHandle = HOperatorSetX.OpenWindow( 0 , 0 , Width , Height , winform.picturebox.hwnd , "transparent","" );

var videoShow = true;
winform.button.oncommand = function(id,event){
    
	while(win.delay(30)&&videoShow){
		Image = HOperatorSetX.GrabImageAsync( AcqHandle , -1 );
		//镜像图像
		var ImageMirror = HOperatorSetX.MirrorImage( Image , "row" );
		HOperatorSetX.DispObj( ImageMirror , WindowHandle );
		//释放内存
		HOperatorSetX.ClearObj( ImageMirror );
		HOperatorSetX.ClearObj( Image );
		
	}

}
winform.button2.oncommand = function(id,event){
    
	videoShow = false;
	win.delay(500)
	HOperatorSetX.CloseFramegrabber( AcqHandle );
	
	
	
}

winform.wndproc = function(hwnd,message,wParam,lParam){
	select( message ) { 
		case 0x10/*_WM_CLOSE*/{
			if(videoShow){
                videoShow = false;
                win.delay(500)
                HOperatorSetX.CloseFramegrabber( AcqHandle );
                }
			
		}
		else{
			
		}
	}
	//无返回值则继续调用默认回调函数
}

winform.enableDpiScaling();
winform.show();

win.loopMessage();
return winform;


调用halcon的摄像头进行连续处理,记得要释放掉Obj内存,要不然内存会慢慢增加到溢出为止。。。。。。。。


注意:

经过多次测试,发现个问题,开启halcon摄像头必须按照一定的顺序初始化,要不然得出的效果就不是正常的。

开启摄像头显示必须按照下面的格式顺序:

 var AcqHandle = HOperatorSetX.OpenFramegrabber( 'DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '', 0, -1 );
 HOperatorSetX.GrabImageStart( AcqHandle , -1 );
 var Image = HOperatorSetX.GrabImageAsync( AcqHandle , -1 );
//调整画面大小和图像一致
var WindowHandle = HOperatorSetX.OpenWindow( 0 , 0 , winform.picturebox.width, winform.picturebox.height , winform.picturebox.hwnd , "transparent","" );

先初始化摄像头,然后开启摄像头,然后获取一帧图像舍弃,再初始化界面中的图像控件。。。

其他的任何顺序都会得不到想要的效果。

1 个回复 | 最后更新于 2018-05-10
2018-05-10   #1

如果调用多个摄像头,必须开线程:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=1348;bottom=646;parent=...)
winform.add(
button={cls="button";text="开启";left=31;top=549;right=193;bottom=635;z=1};
button2={cls="button";text="关闭";left=208;top=549;right=370;bottom=635;z=2};
button3={cls="button";text="开启";left=766;top=546;right=928;bottom=632;z=5};
button4={cls="button";text="关闭";left=1017;top=546;right=1179;bottom=632;z=6};
picturebox={cls="picturebox";left=0;top=0;right=645;bottom=526;z=3};
picturebox2={cls="picturebox";left=704;top=0;right=1349;bottom=526;z=4}
)
/*}}*/
import console
console.open()

winform.button.oncommand = function(id,event){
     thread.set("标志键", true);
     thread.invoke( 
     	function(hwnd){
     		import com;
     		//import win.ui;
			var HOperatorSetX = com.CreateObject("{6ebd90e2-d219-11d2-ade5-0000c00f4ef9}")
     		var AcqHandle = HOperatorSetX.OpenFramegrabber( 'DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0]', 0, -1 );
     		HOperatorSetX.GrabImageStart( AcqHandle , -1 );
     		var Image = HOperatorSetX.GrabImageAsync( AcqHandle , -1 );
		//获取图像宽和高
		var Width , Height = HOperatorSetX.GetImageSize( Image );
     		var WindowHandle = HOperatorSetX.OpenWindow( 0 , 0 , Width , Height , hwnd , "transparent","" );
     		while(thread.get("标志键")){
     		
     		var Image = HOperatorSetX.GrabImageAsync( AcqHandle , -1 );
        //镜像图像
        var ImageMirror = HOperatorSetX.MirrorImage( Image , "row" );
        HOperatorSetX.DispObj( ImageMirror , WindowHandle );
        //释放内存
        HOperatorSetX.ClearObj( ImageMirror );
        HOperatorSetX.ClearObj( Image );
     		sleep(30)
     		
     		
     		}
     		sleep(500)
     		HOperatorSetX.CloseFramegrabber( AcqHandle );
     		
     		
     	},winform.picturebox.hwnd
     )
     

 
}
winform.button2.oncommand = function(id,event){
     
    thread.set("标志键", false); 
     
     
}
 

winform.button3.oncommand = function(id,event){
	thread.set("标志键1", true);
     thread.invoke( 
     	function(hwnd){
     		import com;
     		//import win.ui;
			var HOperatorSetX = com.CreateObject("{6ebd90e2-d219-11d2-ade5-0000c00f4ef9}")
     		var AcqHandle = HOperatorSetX.OpenFramegrabber( 'DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[1]', 0, -1 );
     		HOperatorSetX.GrabImageStart( AcqHandle , -1 );
     		var Image = HOperatorSetX.GrabImageAsync( AcqHandle , -1 );
		//获取图像宽和高
		var Width , Height = HOperatorSetX.GetImageSize( Image );
     		var WindowHandle = HOperatorSetX.OpenWindow( 0 , 0 , Width , Height , hwnd , "transparent","" );
     		while(thread.get("标志键1")){
     		
     		var Image = HOperatorSetX.GrabImageAsync( AcqHandle , -1 );
        //镜像图像
        var ImageMirror = HOperatorSetX.MirrorImage( Image , "row" );
        HOperatorSetX.DispObj( ImageMirror , WindowHandle );
        //释放内存
        HOperatorSetX.ClearObj( ImageMirror );
        HOperatorSetX.ClearObj( Image );
     		sleep(30)
     		
     		
     		}
     		sleep(500)
     		HOperatorSetX.CloseFramegrabber( AcqHandle );
     		
     		
     		
     		
     	},winform.picturebox2.hwnd
     )
}

winform.button4.oncommand = function(id,event){
	thread.set("标志键1", false); 
     
}

winform.enableDpiScaling();
winform.show();
 
win.loopMessage();
return winform;


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
Htmlayout皮肤Htmlayout皮肤引擎介绍
黑猫Aar教程网:简码编程
C大Aardio论坛:Aar爱好者论坛
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...