设置首页收藏本站
开启左侧

Halcon C#开图,调整大小、转灰阶

[复制链接]
jasonme168 发表于 2021-4-10 22:16:25 | 显示全部楼层 |阅读模式
在此获得许多帮助,学后作一点回餽,第一次发文,如有违规请再指正。
Halcon  C#开图,调整大小、转灰阶
调整大小功能没有很完整,请大神再指导修正
  1.   using System;
  2.     using System.Collections.Generic;
  3.     using System.ComponentModel;
  4.     using System.Data;
  5.     using System.Drawing;
  6.     using System.Linq;
  7.     using System.Text;
  8.     using System.Windows.Forms;
  9.     using HalconDotNet;//自行添加引用

  10. namespace HalconCsExample
  11. {

  12.      public partial class Form1 : Form
  13.      {

  14.          private static HWindow hwindow; //全局视窗变数

  15.          HDevelopExport HD = new HDevelopExport();
  16.          string ImagePath;

  17.          public Form1()
  18.          {
  19.              InitializeComponent();
  20.              hwindow = hWindowControl2.HalconWindow;//初始化视窗变量
  21.              this.btnImagePro.Enabled = false;


  22.          }

  23.         private void Form1_Load(object sender, EventArgs e)
  24.         {

  25.         }
  26.         //开启图档
  27.         private void button1_Click(object sender, EventArgs e)
  28.         {
  29.             openFileDialog1.Filter = "JPEG文件|*.jpg*|BMP文件|*.bmp*|TIFF文件|*.tiff*";
  30.             openFileDialog1.RestoreDirectory = true;
  31.             openFileDialog1.FilterIndex = 1;
  32.             if (openFileDialog1.ShowDialog() == DialogResult.OK)
  33.             {
  34.                 ImagePath = openFileDialog1.FileName;

  35.                 HD.ReadImage(hWindowControl2.HalconWindow, ImagePath);
  36.                 this.btnImagePro.Enabled = true;
  37.             }   
  38.         }


  39.         //彩色图转灰阶处理
  40.         private void button2_Click(object sender, EventArgs e)
  41.         {
  42.             HD.ImagePro();
  43.             this.btnImagePro.Enabled = false;
  44.         }

  45.         //调整影像大小
  46.         private void button3_Click(object sender, EventArgs e)
  47.         {
  48.                 #region 初始化变量
  49.                 // Local iconic variables
  50.                 HObject ho_Image;
  51.                 // Local control variables
  52.                 HTuple hv_Width = new HTuple(), hv_Height = new HTuple();
  53.                 // Initialize local and output iconic variables
  54.                 HOperatorSet.GenEmptyObj(out ho_Image);
  55.                 ho_Image.Dispose();
  56.                 HOperatorSet.ReadImage(out ho_Image, ImagePath);
  57.                 hv_Width.Dispose(); hv_Height.Dispose();
  58.                 #endregion

  59.                 #region 缩放图像,适应窗口
  60.                 bool needResizeImage = true;
  61.                 //获取图像大小及纵横比
  62.                 HOperatorSet.GetImageSize(ho_Image, out hv_Width, out hv_Height);
  63.                 int im_width = int.Parse(hv_Width.ToString());
  64.                 int im_height = int.Parse(hv_Height.ToString());
  65.                 double im_AspectRatio = (double)(im_width) / (double)(im_height);
  66.                 //获取窗口大小及纵横比
  67.                 int w_width = hWindowControl2.Size.Width;
  68.                 int w_height = hWindowControl2.Size.Height;
  69.                 double w_AspectRatio = (double)(w_width) / (double)(w_height);

  70.                 HOperatorSet.SetSystem("int_zooming", "false");//图像缩放之前最好将此参数设置为false.
  71.                 HTuple para = new HTuple("constant");
  72.                 HObject ho_zoomImage;
  73.                 HOperatorSet.GenEmptyObj(out ho_zoomImage);

  74.                 ho_zoomImage.Dispose();
  75.                 if (w_width < im_width && im_AspectRatio > w_AspectRatio)
  76.                 {
  77.                     //超宽图像               
  78.                     HOperatorSet.ZoomImageSize(ho_Image, out ho_zoomImage, w_width, w_width / im_AspectRatio, para);
  79.                 }
  80.                 else if (w_height < im_height && im_AspectRatio < w_AspectRatio)
  81.                 {
  82.                     //超高图像               
  83.                     HOperatorSet.ZoomImageSize(ho_Image, out ho_zoomImage, w_height * im_AspectRatio, w_height, para);
  84.                 }
  85.                 else
  86.                 {
  87.                     needResizeImage = false;
  88.                 }
  89.                 #endregion

  90.                 #region 显示图像
  91.                 hwindow.SetPart(0, 0, -2, -2);
  92.                 if (needResizeImage)
  93.                 {
  94.                     hwindow.DispObj(ho_zoomImage);
  95.                 }
  96.                 else
  97.                 {
  98.                     hwindow.DispObj(ho_Image);
  99.                 }

  100.                 #endregion

  101.                 ho_Image.Dispose();
  102.                 ho_zoomImage.Dispose();
  103.                 hv_Width.Dispose();
  104.                 hv_Height.Dispose();
  105.             }

  106.     }


  107.     public partial class HDevelopExport
  108.      {
  109.          public HTuple hv_ExpDefaultWinHandle;
  110.          // 局部标志性变量
  111.          HObject ho_Image, ho_GrayImage;


  112.          public void InitHalcon()
  113.          {
  114.              // HDevelop中使用的默认设置
  115.              HOperatorSet.SetSystem("do_low_error", "false");
  116.           }

  117.          public void ReadImage(HTuple Window,string path)
  118.          {
  119.              hv_ExpDefaultWinHandle = Window;

  120.              // 初始化局部和输出图标变量
  121.              HOperatorSet.GenEmptyObj(out ho_Image);
  122.              HOperatorSet.GenEmptyObj(out ho_GrayImage);

  123.              //读取图片
  124.              //dev_close_window(...);
  125.              ho_Image.Dispose();
  126.              HOperatorSet.ReadImage(out ho_Image, path);

  127.              //dev_open_window(...);
  128.              HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);

  129.          }

  130.          //灰阶处理
  131.          public void ImagePro()
  132.          {
  133.              ho_GrayImage.Dispose();
  134.              HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);
  135.              HOperatorSet.DispObj(ho_GrayImage, hv_ExpDefaultWinHandle);

  136.              ho_Image.Dispose();
  137.              ho_GrayImage.Dispose();

  138.          }
  139.   //

  140.         //
  141.      }
  142. }
复制代码

奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表