IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Halcon图像类HImage转为.NET图像类Bitamap -> 正文阅读

[人工智能]Halcon图像类HImage转为.NET图像类Bitamap

在上一篇完成OPENCV 图像类Mat 与.NET图像类Bitamap互相转换之后,本篇博客又给出了Halcon图像类HImage转为.NET图像类Bitamap。不过目前还只能讲彩色三通道图像HImage转为黑白单通道Bitmap。
彩色互转还需要做实验。
另外,鉴于.Net 自身对图像处理有限的功能,将Bitmap转为HImage,也会有相关的方法,需要的可以评论区留言。
作为十分出名的商用计算机视觉库Halcon,本文就给出如何将Halcon图像类HImage转为.NET图像类Bitamap。
本文将转换方法封装成一个函数,输出为Bitmap类型实例。
下面是一个demo,具体如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using HalconDotNet;

namespace HImage与Bitamap互转
{
    public partial class Form1 : Form
    {
        //HDevelopExport cv = new HDevelopExport();
        Thread grabThread;
        public HTuple hv_ExpDefaultWinHandle;
        bool startGrabFlag = false;
        HTuple hv_AcqHandle = new HTuple();
        public static Bitmap bmp;
        //public Bitmap bmp;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //cv.GiveWindow(hWindowControl.HalconWindow);
        }

        private void openCameraBtn_Click(object sender, EventArgs e)
        {
            //cv.OpenCam();
            hv_AcqHandle.Dispose();
            HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb",
                -1, "false", "default", "[0] USB2.0 VGA UVC WebCam", 0, -1, out hv_AcqHandle);
        }

        private void closeCamBtn_Click(object sender, EventArgs e)
        {
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);

        }

        private void startGrabBtn_Click(object sender, EventArgs e)
        {
            grabThread = new Thread(new ThreadStart(GrabNow));
            grabThread.Start();
        }
        private void GrabNow()
        {
            HObject ho_Image = null;
            startGrabFlag = true;
            // Initialize local and output iconic variables 
            HOperatorSet.GenEmptyObj(out ho_Image);
            //Image Acquisition 01: Code generated by Image Acquisition 01
            HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
            while (startGrabFlag == true)
            {
                ho_Image.Dispose();
                HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
                pictureBox.Image = Exchange(ho_Image);
                //HOperatorSet.GetImageSize(ho_Image,)
                HOperatorSet.DispObj(ho_Image, hWindowControl.HalconWindow);
                //Image Acquisition 01: Do something
            }

            ho_Image.Dispose();
        }
        private HImage HObjectToHImage(HObject obj)
        {
            HImage img = new HImage();
            HTuple pointer, type, width, heght;
            HOperatorSet.GetImagePointer1(obj, out pointer, out type, out width, out heght);
            //HOperatorSet.GenEmptyObj(out img);
            img.GenImage1(type, width, heght, pointer);
            return img;
        }

        private Bitmap Exchange(HObject ho_Image)
        {
            HImage temp = HObjectToHImage(ho_Image);
            HImage grayImage = temp.Rgb1ToGray();//将彩色图像转为黑白
            string type;//接收图像类型
            int width, height;//接收图像尺寸
            IntPtr pointer = grayImage.GetImagePointer1(out type, out width, out height);
            ColorPalette palette = null;
            Bitmap bitmap = null;
            Bitmap curBitmap = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
            Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height);
            BitmapData imageData = curBitmap.LockBits(rect, ImageLockMode.ReadOnly, curBitmap.PixelFormat);
            int PixelSize = Bitmap.GetPixelFormatSize(imageData.PixelFormat) / 8;
            //定义用于存储图像数据的Buffer
            byte[] buffer = new byte[curBitmap.Width * curBitmap.Height];
            //将图像数据复制到Buffer内
            System.Runtime.InteropServices.Marshal.Copy(pointer, buffer, 0, buffer.Length);
            unsafe
            {
                //使用不安全代码
                fixed (byte* bytePointer = buffer)
                {
                    bitmap = new Bitmap(curBitmap.Width, curBitmap.Height, curBitmap.Width, PixelFormat.Format8bppIndexed, new IntPtr(bytePointer));
                    palette = bitmap.Palette;
                    for (int Index = 0; Index <= byte.MaxValue; Index++)
                    {
                        palette.Entries[Index] = Color.FromArgb(byte.MaxValue, Index, Index, Index);
                    }
                    bitmap.Palette = palette;
                    // bitmap.Save(@"C:\Users\15162\Desktop\bitmap.bmp");
                }
            }
            return bitmap;
        }
        private void stopGrabBtn_Click(object sender, EventArgs e)
        {
            startGrabFlag = false;
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            startGrabFlag = false;
            if (grabThread.IsAlive)
            {
                grabThread.Abort();
            }
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);
            hv_AcqHandle.Dispose();
        }
    }
}

界面如下:
在这里插入图片描述
左边是Halcon的.Net 图形框插件 HWindowControl, 右边是PictureBox。
本Demo实现的效果是两个窗体实时实现同步的画面。
具体的转换方法请看上面代码。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 13:03:21  更:2021-10-29 13:03:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:23:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码