qt使用halcon的函数findbarcode读条码,直接使用例程能运行出正确结果,把例程的读图改为我使用qt获取图片后转成HImage就不行了。

上代码,上面是正常例程

 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后的图看是不是图像问题,一般三通道的图容易出现问题,网上有些不靠谱的转换方式