上代码,上面是正常例程
HObject ho_Image, ho_SymbolRegions;
HTuple hv_BarCodeHandle, hv_DecodedDataStrings;
CreateBarCodeModel(HTuple(), HTuple(), &hv_BarCodeHandle);
SetBarCodeParam(hv_BarCodeHandle, "stop_after_result_num", 1);
SetBarCodeParamSpecific(hv_BarCodeHandle, "2/5 Industrial", "min_code_length", 1);
ReadImage(&ho_Image, HTuple("barcode/25industrial/25industrial0")+1);
SetBarCodeParam(hv_BarCodeHandle, "check_char", "absent");
FindBarCode(ho_Image, &ho_SymbolRegions, hv_BarCodeHandle, "2/5 Industrial", &hv_DecodedDataStrings);
SetBarCodeParam(hv_BarCodeHandle, "check_char", "present");
FindBarCode(ho_Image, &ho_SymbolRegions, hv_BarCodeHandle, "2/5 Industrial", &hv_DecodedDataStrings);
上面就是halcon的例程,可以在qt上正常打印出hv_DecodedDataStrings的值是正确的条码值
下面是问题,只有中间一处改动
HObject ho_Image, ho_SymbolRegions;
HTuple hv_BarCodeHandle, hv_DecodedDataStrings;
CreateBarCodeModel(HTuple(), HTuple(), &hv_BarCodeHandle);
SetBarCodeParam(hv_BarCodeHandle, "stop_after_result_num", 1);
SetBarCodeParamSpecific(hv_BarCodeHandle, "2/5 Industrial", "min_code_length", 1);
//ReadImage(&ho_Image, HTuple("barcode/25industrial/25industrial0")+1);
qImageToHimage(img,ho_Image);//就只有这里改变,此函数将获取的QImage类型的imf转换为HImage的ho_Image;在其他地方使用过,此转换能成功并且使用得到的ho_Image运行halcon 的阈值化函数能成功;
SetBarCodeParam(hv_BarCodeHandle, "check_char", "absent");
FindBarCode(ho_Image, &ho_SymbolRegions, hv_BarCodeHandle, "2/5 Industrial", &hv_DecodedDataStrings);
SetBarCodeParam(hv_BarCodeHandle, "check_char", "present");
FindBarCode(ho_Image, &ho_SymbolRegions, hv_BarCodeHandle, "2/5 Industrial", &hv_DecodedDataStrings);
现在的问题就是为什么条码的值hv_DecodedDataStrings打印出来是空的,我将类型 "2/5 Industrial"改为“auto”后有值但不对,我就想是不是这个类型变了,如果是,我该如何获得这个类型,如果不是,是什么问题呢?
简言之两种情况,一种是直接用halcon读取路径的图片,直接使用该图片,正常运行;另一种是先用qt读取图片,转成halcon的图片后使用该图片就不行了;
把你的qImageToHimage(img,ho_Image),发来看看,估计转换有问题,或者你在转换后看看WriteImage后的图看是不是图像问题,一般三通道的图容易出现问题,网上有些不靠谱的转换方式