普通图像数据转换为halcon能操作的图像数据的办法

By admin at 2019-05-11 • 0人收藏 • 278人看过

image.png

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=1171;bottom=767)
winform.add(
picturebox={cls="picturebox";left=400;top=0;right=1172;bottom=768;z=1};
picturebox2={cls="picturebox";left=0;top=0;right=317;bottom=267;z=2}
)
/*}}*/

import soImage;

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

/*
Image = HOperatorSetX.ReadImage( 'C:/Users/popdes/Desktop/f083.png' );
var GrayImage = HOperatorSetX.Rgb1ToGray( Image );
var Width , Height = HOperatorSetX.GetImageSize( GrayImage );

*/

var simg = soImage();
simg.load("C:\Users\popdes\Desktop\f083.png")
simg.grayScale();

winform.picturebox2.image = simg.getBytes("*.bmp")
//垂直翻转, 不执行这个会导致图像上下反的
simg.flip()
var addr = tonumber(raw.toPointer(simg.getBytes("*.bmp")));
var Image = HOperatorSetX.GenImage1( "byte" , simg.getWidth() , simg.getHeight() , addr );

var WindowHandle = HOperatorSetX.OpenWindow( 0 , 0 , winform.picturebox.width , winform.picturebox.height , winform.picturebox.hwnd , "visible", "" );

HOperatorSetX.DispObj( Image , WindowHandle );

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

先记录到这里, 明显是有问题的, 正常情况下, 窗口应该两个图像显示的一致, 但是这个显示明显左右分离了

2 个回复 | 最后更新于 2019-05-12
2019-05-11   #1

上面实现的方式有点问题, 去网上搜了下

参考网址里面的写法https://blog.csdn.net/bingbingxie1/article/details/83344704

实现了 bitmap变量转为 halcon变量

//bitmap变量转为 halcon变量
var bmp2halconPtr = function(bmpPath){
    //从文件创建位图
	var bmp = gdip.bitmap(bmpPath);
	//获取位图数据
	var bmpdata = bmp.lockData32(,0x30803/*_PixelFormat8bppIndexed*/);
	var dataBlue = raw.buffer(bmp.width*bmp.height)
	var ptrdata = tonumber(raw.toPointer(dataBlue));
	for(i=0;bmp.height-1;1){
		::CopyMemory(topointer((ptrdata+bmp.width*i)),topointer(tonumber(raw.toPointer(bmpdata.Scan0))+bmpdata.Stride*i),bmp.width);
	}
	bmp.unlockData(bmpdata);
	return ptrdata,bmp.width,bmp.height;
}



var ptrdata,宽,高 = bmp2halconPtr("C:\Users\popdes\Desktop\f083.png")

var Image2 = HOperatorSetX.GenImage1( "byte" , 宽 , 高 , ptrdata );

var WindowHandle2 = HOperatorSetX.OpenWindow( 0 , 0 , winform.picturebox3.width , winform.picturebox3.height , winform.picturebox3.hwnd , "visible", "" );

HOperatorSetX.SetPart( WindowHandle2 , 0 , 0 , 高-1 , 宽-1 );

HOperatorSetX.DispObj( Image2 , WindowHandle2 );

image.png

2019-05-12   #2

halcon图像变量转普通bitmap图像

代码如下,目前还有问题, 没实现成功, 以后有时间继续研究, 先放一边

	var PointerRed , PointerGreen , PointerBlue , Type , Width , Height = HOperatorSetX.GetImagePointer3( Image );
	console.varDump(PointerRed)

	var PRed = raw.buffer(raw.tostring(topointer(PointerRed)))
	var PGreen = raw.buffer(raw.tostring(topointer(PointerGreen)))
	var PBlue= raw.buffer(raw.tostring(topointer(PointerBlue)))

	console.log(Type , Width , Height)

	var bmp5 = gdip.bitmap(Height , Width);
	//获取位图数据
	var bmpdata = bmp5.lockData32(,0x22009/*_PixelFormat32bppRGB*/);

	var bptr = bmpdata.Scan0;

	for(i=1;Width*Height;1){
		bptr[(i-1)*4+1]=PBlue[i];
		bptr[(i-1)*4+2]=PGreen[i];
		bptr[(i-1)*4+3]=PRed[i];
		bptr[(i-1)*4+4]=255;
	}
	bmp5.unlockData(bmpdata);

winform.plus.background = bmp5;

目前还只是黑色一片.......

image.png

登录后方可回帖

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