Halcon学习笔记(一)——图像阈值化处理

时间:2022-01-16 06:13:35

       今天开始,开始学习Halcon图像处理,希望与有共同兴趣的朋友一起学习进步。

                                                                                                                                  -----------pbImage, 2014.04.05

1. vs2013平台阈值化图像

#include "cpp/HalconCpp.h"
#include "Halcon.h"
#include <stdlib.h>

using namespace Halcon;

const char gImageName[256] = "lena.jpg";

int main()
{
Hobject image, regions;

HTuple width, height, windowId;

read_image(&image, gImageName);//载入图像

get_image_size(image, &width, &height);//获取图像宽、高

open_window(0, 0, width, height, 0, "", "", &windowId);//创建窗口

int w = width[0].I();//HTuple类型转换int
int h = height[0].I();

//auto_threshold(image, &regions, 2);//基于直方图自适应二值化
threshold(image, &regions, 64, 128);//固定阈值二值化

disp_obj(regions, windowId);//显示图像

getchar();

return 0;
}


Halcon基础:

1. halcon显示图像的各个函数区别

    disp_image()    图像首通道灰度图,如3通道图像,也仅显示第一个数据通道图像;

    disp_color()      显示彩色图;

    disp_channel() 某特定通道;

    disp_obj()          自动判别类别,即图像为彩色图像,则显示为彩色;如图像为灰色图像,则显示为灰度;

2. write_image(image, "jpg", 0, "image.jpg");  将图像image以jpg格式存储到文件image.jpg中

3. HTuple数据结构与c++数据类型互转

//HTuple与int互转:
HTuple tuple;
int val = 2;
tuple[0] = val;//int 转HTuple
val = tuple[0].I();//HTuple转int
//HTuple与long互转:
long val = 10;
tuple[0] = val;
val = tuple[0].L();
//HTuple与double互转:
double val = 3.3;
tuple[0] = val;
val = tuple[0].D();
//HTuple转const char*:
CString strVal = "Halcon";
tuple[2] = strVal.GetBuffer();
strVal = tuple[2].S();

int num = tuple.Num();

注:初接触Halcon,我的理解是HTuple类似C++中的vector(可能比喻不够恰当), 但是又不同于vector,HTuple可以存不同类型数据,
如HTuple[0]存int型,HTuple[1]存double型,HTuple[2]存字符串...HTuple.Num()返回整个HTuple类型数据的总长度。