1.没有加载任何图片的情况下进行绘制仿射矩形或者矩形:- draw_rectangle2 (WindowHandle, Row1, Column1, Phi, Length1, Length2)
- gen_rectangle2 (Rectangle, Row1, Column1, Phi, Length1, Length2)
复制代码 绘制后的图像如下:
2.右键确认以后,显示仿射矩形就不正确了:
3.相信很多人都遇到过类似这样的问题吧?
还有一种情况就是读取一组坐标然后生成ROI,根本生成不了,那么和这个是同理的!
主要是在VC++、C#中根据指定的数据生成ROI,比如gen_rectangle1始终生成的ROI是空的
或保存好的区域再次读取出来是空的。
常规情况下解决方法大概有下列四种:
1.reset_obj_db 重置DataBase为指定缓存大小;
2.读取一张比区域还大图像;
3.设置默认缓存大小;
4.设置系统是否裁剪区域为false:
- set_system ('clip_region', 'false')
复制代码
下面我们来探索下为什么会出现这种情况:
5.发现我们绘制的仿射矩形的图像变量是这样的,感觉哪儿不对?哪儿不对呢???。。。。
6.对了,很像标准的齐轴矩形,很奇怪怎么会这样呢???
7.现在开始验证自己的想法,有没有可能是窗口原因呢?
8.使用代码获取下这个区域的齐轴矩形大小看看:
- smallest_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
- gen_rectangle1 (Rectangle1, Row1, Column1, Row2, Column2)
复制代码 8.显示图像如下:
9.最后这个Rectangle1是margin显示模式。这个显示就有点意思了,感觉窗口大小就这么大了,莫非窗口有效区域就这么大?
10.获取下窗口的默认缓存区域大小看看
- get_system ('tsp_width', width)
- get_system ('tsp_height', height)
复制代码 结果不可思议,真的窗口的缓存区域就是这么大,也就是512*512是默认的缓存区域大小了。
11.那就试试512*512大小的画仿射矩形会不会出现被截断的情况:
- *关闭当前图形窗口
- dev_close_window ( )
- *打开一个指定大小的窗口 512*512
- dev_open_window_fit_size (0, 0, 512, 512, -1, -1, WindowHandle)
- *获取下窗口相关的属性,确认下宽度和高度是512,这样窗口大小和缓存大小一致了
- get_window_extents (WindowHandle, Row, Column, Width, Height)
- *再次绘制检测框
- draw_rectangle2 (WindowHandle, Row1, Column1, Phi, Length1, Length2)
- gen_rectangle2 (Rectangle, Row1, Column1, Phi, Length1, Length2)
复制代码
12.奇迹出现了,真的是这样的,仿射矩形显示正常了!
13.那如果是这样的话,默认缓存是512*512,我修改大小后可以画吗?试试看,先关掉HDevelop,重新打开恢复默认环境,输入代码:
- set_system ('tsp_width', 3000)
- set_system ('tsp_height', 3000)
复制代码 14.上面的两句代码意思是设置默认的图像缓存的宽度和高度都是3000,这样就足够大了!
- set_system ('tsp_width', 3000)
- set_system ('tsp_height', 3000)
- draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)
- gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
复制代码 15.OK!现在仿射矩形图像完全正常了!果然和我猜想的一模一样!
- get_system ('tsp_width', width)
- get_system ('tsp_height', height)
- read_image (Image, 'clip')
- get_system ('tsp_width', width)
- get_system ('tsp_height', height)
复制代码
这个时候你会发现原来的是默认512*512大小,读取图片以后就成了图片的宽度大小了,也就是832*822缓存宽度了!
同时这个问题在C#\C++联合开发中也是一样存在,比如在C#或者VC++里面绘制矩形是正常的,保存也是正常的(halcon读取没有问题),但是下一次打开加载读取变成空的!
最后就是要说的,通过read_image加载图片会自动增加缓存大小!
|