在VC环境下进行图像处理,往往需要自己写图像处理的类,现在有一些前人写好的类,比如CDib类、DIBAPI类等等,因此可以直接“拿来主义”。HALCON库就相当于一个封装好的类,通过在VC下进行一些简单的设置,我们就可以使用其里面的函数了。下面是在VC环境下如何设置:
1. 首先在project->settings.....中的Link属性页中添加halconcpp.lib;
2. 其次在project->settings.....中的C/C++属性页中的Preprocessor中添加目录$(HALCONROOT)\include,$(HALCONROOT)\include\cpp;
3. 然后在project->settings.....中的Link属性页中input下来菜单中添加路径$(HALCONROOT)\lib\i586-nt4;
4. 最后当然是不要忘了在程序中添加类的头文件了:#i nclude "HalconCpp.h"
上面的设置好了,一切OK了。下面就可以在程序中调用HDevelop中的函数了,比如图像增强函数emphasize(hImage, &hRotateImage, 7, 7, 2.0)等等。我们知道在HDevelop中通常图像是作为一个tuple变量,因此在VC中有必要进行变量转换,例如:
针对灰度图像可以将图像数转换成一个Hobject变量:
gen_image1(&hImage,"byte",WIDTH, HEIGHT,(long)m_pImageBuffer);
针对彩色图像,可以分别取出R、G、B三个分量:
ExtractRGB24Channels(m_pImageBuffer, m_pRed, m_pGreen,m_pBlue);
然后在转换为Hobject变量:
gen_image3(&hImage, "byte", width, height, (long )m_pRed, (long )m_pGreen, (long )m_pBlue);
接下来就可以调用图像处理函数了,比如
图像增强:emphasize(hImage, &hRotateImage, 7, 7, 2.0); //参数可以调整
阈值化:bin_threshold(hImage,&hRotateImage);
rgb1_to_gray(hImage,&hRotateImage);//转化为灰度图
把处理完的变量转换成到一个buffer中,用于图像显示:get_image_pointer1(hRotateImage,(long *)&m_pImageBuffer,Type, &width1, &height1);
但在调用HALCON库函数时也碰到了一些问题,比如在图像旋转中rotate_image(hImage, &hRotateImage, 90, "constant"); 将处理后的变量转换成
get_image_pointer3(hRotateImage, (long *)&m_pRed, (long *)&m_pGreen, (long *)&m_pBlue, Type, &width1, &height1);
ComposeRGB24(m_pRed, m_pGreen, m_pBlue, m_pImageBuffer);
而执行过程中出现错误,get_image_pointer3这个函数报错,Undefined gray value in get_image_pointer3还需解决!
边摸索边进步,在其他环境中的调用还需要试试,比如嵌入式操作系统等等。