halcon转c#后的模板

using HalconDotNet;//添加引用
using System;

namespace Halcon64
{

    public partial class ImageProcess1
    {
        private HTuple hv_image_flag = null;
        private HTuple hv_num_image = null;
        private HTuple hv_DLClassifierHandle = null;
        private HTuple hv_DlRangeMin = null;
        private HTuple hv_DlRangeMax = null;

        private HTuple hv_FileName = null;
        private HTuple hv_Runtime = null;


        /// <summary>
        /// 初始化全局变量
        /// 每一轮开始的时候调用
        /// </summary>
        public ImageProcess1()
        {
            //存放每个图片的类型
            HOperatorSet.TupleGenConst(6000, 0, out hv_image_flag);

            //num张图片统计一次
            HOperatorSet.TupleGenConst(1, 0, out hv_num_image);

            //模型参数
            HOperatorSet.TupleGenConst(1, 0, out hv_DLClassifierHandle);
            HOperatorSet.TupleGenConst(1, -127.0, out hv_DlRangeMin);
            HOperatorSet.TupleGenConst(1, 128.0, out hv_DlRangeMax);

            //模型存放地址(需要修改为对应的地址)
            hv_FileName = @"./model/best_model.hdl";
            hv_Runtime = "cpu";
            Init();//加载模型
        }

        /// <summary>
        /// 加载模型
        /// </summary>
        //private void Init()
        public void Init()
        {

            //加载模型
            HOperatorSet.ReadDlClassifier(hv_FileName, out hv_DLClassifierHandle);
            //单张图片测试
            HOperatorSet.SetDlClassifierParam(hv_DLClassifierHandle, "batch_size", 1);
            //测试是否可以在CPU环境下运行
            try
            {
                HOperatorSet.SetDlClassifierParam(hv_DLClassifierHandle, "runtime", "cpu");
                hv_Runtime = "cpu";
            }
            // catch (Exception) 
            catch (HalconException)
            {
                hv_Runtime = "gpu";
            }
            //设置超参数
            HOperatorSet.SetDlClassifierParam(hv_DLClassifierHandle, "runtime_init", "immediately");

        }

        /// <summary>
        /// 清除 复位
        /// </summary>
        public void Clear()
        {

            HOperatorSet.TupleGenConst(6000, 0, out hv_image_flag);

            HOperatorSet.TupleGenConst(1, 0, out hv_num_image);

            HOperatorSet.TupleGenConst(1, 0, out hv_DLClassifierHandle);
            HOperatorSet.TupleGenConst(1, -127.0, out hv_DlRangeMin);
            HOperatorSet.TupleGenConst(1, 128.0, out hv_DlRangeMax);
        }


        /// <summary>
        /// 主程序 
        /// 获取每张图片时调用
        /// </summary>
        public void Action(HObject ho_Image, HTuple hv_ImageID, out HTuple hv_flag, out HTuple hv_Exception)
        {
            // Stack for temporary objects 
            HObject[] OTemp = new HObject[20];

            // Local control variables 
            HTuple hv_Area = new HTuple(), hv_Area1 = new HTuple();
            HTuple hv_Number = new HTuple();
            HTuple hv_RescaleRange = new HTuple(), hv_Channel = new HTuple();
            HTuple hv_DLClassifierResultHandle = new HTuple(), hv_PredictedClass = new HTuple();
            // Initialize local and output iconic variables 
            HObject ho_Image1;
            HOperatorSet.GenEmptyObj(out ho_Image1);
            HObject ho_Region;
            HOperatorSet.GenEmptyObj(out ho_Region);
            HObject ho_ConnectedRegions;
            HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);
            HObject ho_SelectedRegions;
            HOperatorSet.GenEmptyObj(out ho_SelectedRegions);

            //先赋值
            hv_flag = 0;
            hv_Exception = 0;
            try
            {
                //初始化输出变量

                hv_Area = 0;
                hv_Number = 0;
                using (HDevDisposeHelper dh = new HDevDisposeHelper())
                {
                    {
                        HTuple
                            ExpTmpLocalVar_num_image = hv_num_image + 1;
                        hv_num_image = ExpTmpLocalVar_num_image;
                    }
                }
                //存储
                ho_Image1 = new HObject(ho_Image);

                //**************【算法模型】*********************
                try
                {
                    //**************【1、图像预处理】*********************
                    //图像裁剪、缩放
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.ZoomImageSize(ho_Image, out ExpTmpOutVar_0, 224, 224, "bilinear");
                        ho_Image = ExpTmpOutVar_0;
                    }
                    //将图像的灰度缩放成网络model需求范围
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.ConvertImageType(ho_Image, out ExpTmpOutVar_0, "real");
                        ho_Image = ExpTmpOutVar_0;
                    }
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_RescaleRange = (hv_DlRangeMax - hv_DlRangeMin) / 255.0;
                    }
                    //缩放图像的灰度值
                    {
                        HObject ExpTmpOutVar_0;
                        HOperatorSet.ScaleImage(ho_Image, out ExpTmpOutVar_0, hv_RescaleRange,
                            hv_DlRangeMin);
                        ho_Image = ExpTmpOutVar_0;
                    }
                    //如果图片不是三通道图,就需要将图像合成三通道图
                    HOperatorSet.CountChannels(ho_Image, out hv_Channel);
                    if ((int)(new HTuple(hv_Channel.TupleNotEqual(3))) != 0)
                    {
                        {
                            HObject ExpTmpOutVar_0;
                            HOperatorSet.Compose3(ho_Image, ho_Image, ho_Image, out ExpTmpOutVar_0
                                );
                            ho_Image = ExpTmpOutVar_0;
                        }
                    }
                    
                    //**************【2、图像检测】*********************
                    HOperatorSet.ApplyDlClassifier(ho_Image, hv_DLClassifierHandle, out hv_DLClassifierResultHandle);
                    HOperatorSet.GetDlClassifierResult(hv_DLClassifierResultHandle, "all",
                        "predicted_classes", out hv_PredictedClass);

                    //**************【3、输出结果】*********************
                    using (HDevDisposeHelper dh = new HDevDisposeHelper())
                    {
                        hv_flag = hv_image_flag.TupleSelect(
                            hv_ImageID);
                    }
                }
                catch (HalconException HDevExpDefaultException2)
                {
                    HDevExpDefaultException2.ToHTuple(out hv_Exception);
                    hv_flag = 5;
                }
            }
            catch (HalconException HDevExpDefaultException1)
            {
                HDevExpDefaultException1.ToHTuple(out hv_Exception);
                hv_flag = 6;
            }
            // 局部变量Dispose
            ho_Region.Dispose();
            ho_ConnectedRegions.Dispose();
            ho_SelectedRegions.Dispose();
            hv_Number.Dispose();
            hv_RescaleRange.Dispose();
            hv_Channel.Dispose();
            hv_DLClassifierResultHandle.Dispose();
            hv_PredictedClass.Dispose(); ;

        }

    }

}


public class HDevelopExportApp
{
    static void Main(string[] args)
    {
        string ID = null;
        string flag = null;
        HObject ho_Image;
        HTuple hv_ImagePath = new HTuple(), hv_ImageFiles = new HTuple();
        HTuple hv_ImageID = new HTuple();

        // Initialize local and output iconic variables 
        HOperatorSet.GenEmptyObj(out ho_Image);

        Halcon64.ImageProcess1 b = new Halcon64.ImageProcess1();

        //文件路径
        hv_ImagePath = @"./data";
        HOperatorSet.ListFiles(hv_ImagePath, (new HTuple("files")).TupleConcat("follow_links"),
            out hv_ImageFiles);
        for (hv_ImageID = 1; (int)hv_ImageID <= (int)((new HTuple(hv_ImageFiles.TupleLength()
            )) - 1); hv_ImageID = (int)hv_ImageID + 1)
        {
            //对每张图片处理
            using (HDevDisposeHelper dh = new HDevDisposeHelper())
            {
                HOperatorSet.ReadImage(out ho_Image, hv_ImageFiles.TupleSelect(hv_ImageID));
                b.Action(ho_Image, hv_ImageID, out HTuple hv_flag, out HTuple hv_Exception);

                ID = hv_ImageID.ToString();
                flag = Convert.ToString(hv_flag[0].I);
                Console.WriteLine("ID:" + ID);
                Console.WriteLine("flag:" + flag);
            }
            
            ho_Image.Dispose();
            hv_ImagePath.Dispose();
            hv_ImageFiles.Dispose();
            hv_ImageID.Dispose();

        }
        Console.WriteLine("结束!");
        Console.ReadLine();



    }
}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Halcon中,可以使用图像增强相关算子来进行图片的压缩。其中,两个常用的算子是`equ_histo_image`和`pow_image`。 使用`equ_histo_image`算子可以对图片进行直方图均衡化,从而增强图片的对比度和亮度。通过对图像的像素值进行调整,可以使得整个图像的像素分布更加均匀,从而提高图像的质量和细节。 使用`pow_image`算子可以对图片进行幂次变换,从而改变图片的亮度和对比度。通过对图像的像素值进行指数变换,可以增加或减少图像的亮度,并调整图像的对比度。 具体实现方法如下: 1. 首先,使用`read_image`函数读取待压缩的图片,比如`read_image (Image, 'C:/Users/Administrator/Desktop/1.png')`。这将把图片加载到Halcon的图像变量中。 2. 接下来,可以使用`equ_histo_image`算子对图片进行直方图均衡化,比如`equ_histo_image (Image, ImageEquHisto)`。这将生成一个直方图均衡化后的图片,并将其保存到名为`ImageEquHisto`的图像变量中。 3. 或者,可以使用`pow_image`算子对图片进行幂次变换,比如`pow_image (Image, PowImage, 2)`。这将对图片进行指数为2的幂次变换,并将结果保存到名为`PowImage`的图像变量中。 通过使用这些图像增强相关算子,可以在Halcon中实现对图片的压缩。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [halcon——图像增强算子以及分类](https://blog.csdn.net/qq_44386034/article/details/125637808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值