tystq
资深人士
资深人士
  • 最后登录2020-10-23
  • 发帖数477
  • 金币20457枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:4925回复:12

我也说下VB.net或者C#下通过相机SDk采集图像到halcon的方法

楼主#
更多 发布于:2015-03-26 10:43
使用halcon发现有些相机没有提供halcon接口,连directshow接口也没有,即使有directshow接口但一些细节比如曝光时间调节等也没有相机的SDK好用,下面谈谈调用SDK的方法
一般相机的SDK是提供一个回调函数,在回调函数中返回一个字节数组(这个就是我们需要的原始数据),但是不同的相机厂商有不同的数据排列格式,一般是BGR模式,特别要注意一点就坐标体系问题,有的厂商是左上角是原点保存数据,有的厂商是左下角是原点保存的数据,如果是左下角原点,自己要转换,下面是简单的函数实现
Imports System.Runtime.InteropServices'这里一定要有
Imports System.Drawing.Imaging
Imports HalconDotNet
  Private Function Halcon_RGB_FL(ByVal bitmap() As Byte, ByRef RGB As IntPtr, ByRef R As IntPtr, ByRef G As IntPtr, ByRef B As IntPtr, ByVal width As Integer, ByVal height As Integer) As Boolean '提取R,G,B颜色分量
        ''取得R,G,B颜色分量----这个是左上角是原点的实现
        'For i As Integer = 0 To width * height - 1

        '    Color_R(i) = bitmap(i * 3 + 2)
        '    Color_G(i) = bitmap(i * 3 + 1)
        '    Color_B(i) = bitmap(i * 3 + 0)
        'Next
        For i As Integer = 0 To height - 1 '这个是左下角是原点的实现
            For j As Integer = 0 To width - 1
                Color_R(i * width + j) = bitmap(((height - 1 - i) * width + j) * 3 + 2)
                Color_G(i * width + j) = bitmap(((height - 1 - i) * width + j) * 3 + 1)
                Color_B(i * width + j) = bitmap(((height - 1 - i) * width + j) * 3 + 0)
            Next
        Next
        'RGB = GCHandle.Alloc(bitmap, GCHandleType.Pinned).AddrOfPinnedObject()
        R = GCHandle.Alloc(Color_R, GCHandleType.Pinned).AddrOfPinnedObject() '取得目标数组的指针
        G = GCHandle.Alloc(Color_G, GCHandleType.Pinned).AddrOfPinnedObject()
        B = GCHandle.Alloc(Color_B, GCHandleType.Pinned).AddrOfPinnedObject()
    End Function
'通过上面的函数就得到了3个指针,就可以和halcon互动了,下面是回调函数中的核心代码
Dim RGB As IntPtr, R As IntPtr, G As IntPtr, B As IntPtr'定义了4个指针
   '地址转换成数组
        byData = dvpCamera.IntPtrToByteArray(pBmp24, sFrInfo.uiWidth * sFrInfo.uiHeight * 3) '这个是厂商的SDK代码, byData为字节数组
        'MsgBox(sFrInfo.uiWidth)
        Halcon_RGB_FL(byData, RGB, R, G, B, 4384, 3288) '这里的4384,3288分别表示图像的宽,高
        ' Initialize local and output iconic variables
        HOperatorSet.GenEmptyObj(ho_ImageRGB)
        ho_ImageRGB.Dispose()
        HOperatorSet.GenImage3(ho_ImageRGB, New HTuple("byte"), New HTuple(4384), New HTuple(3288), _
           R, G, B)'这里是halcon的接口
        HOperatorSet.DispObj(ho_ImageRGB, HWindowControl1.HalconWindow)通过上面的处理,就可以和halcon完美结合了
喜欢6

最新打赏:0人

tystq
资深人士
资深人士
  • 最后登录2020-10-23
  • 发帖数477
  • 金币20457枚
  • 贡献勋章0枚
  • 社区居民
  • 社区明星
  • 忠实会员
  • 喜欢达人
  • 原创写手
沙发#
发布于:2015-03-26 11:05
补充下变量申明
 Public Color_R(4384 * 3288 - 1) As Byte '存放R通道的数据
 Public Color_G(4384 * 3288 - 1) As Byte
  Public Color_B(4384 * 3288 - 1) As Byte
  Public Color_RGB(4384 * 3288 * 3 - 1) As Byte
happybank
技术员
技术员
  • 最后登录2020-05-20
  • 发帖数107
  • 金币589枚
  • 贡献勋章0枚
  • 社区居民
板凳#
发布于:2015-04-03 16:53
好东西,支持下.........
seaman
初学者
初学者
  • 最后登录2017-07-05
  • 发帖数17
  • 金币63枚
  • 贡献勋章0枚
  • 社区居民
地板#
发布于:2015-05-05 14:24
谢谢楼主分享,好东西!
kevinfu
初学者
初学者
  • 最后登录2018-05-12
  • 发帖数17
  • 金币66枚
  • 贡献勋章0枚
  • 社区居民
4楼#
发布于:2017-09-17 15:44
楼主威武,这个非常有用,谢谢分享
阳光总在风雨后
技术员
技术员
  • 最后登录2020-06-30
  • 发帖数32
  • 金币113枚
  • 贡献勋章0枚
  • 社区居民
5楼#
发布于:2017-09-23 05:23
Mark一下。。。。。。
18578296795
技术员
技术员
  • 最后登录2020-07-19
  • 发帖数81
  • 金币253枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
6楼#
发布于:2017-11-13 16:21
tystq:补充下变量申明
 Public Color_R(4384 * 3288 - 1) As Byte '存放R通道的数据
 Public Color_G(4384 * 3288 - 1) As Byte
  Public Color_B(438...
回到原帖
谢谢分享!
gongkeking
助理工程师
助理工程师
  • 最后登录2018-12-20
  • 发帖数183
  • 金币489枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
7楼#
发布于:2017-11-15 14:42
好东西,支持下.........
qingfengpu
技术员
技术员
  • 最后登录2020-06-25
  • 发帖数25
  • 金币107枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
8楼#
发布于:2018-04-22 13:35
好东西,支持下.........
xiaomi
技术员
技术员
  • 最后登录2020-10-23
  • 发帖数112
  • 金币650枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
9楼#
发布于:2018-08-04 10:56
谢谢分享,学习一下!
牵着蜗牛去散步
技术员
技术员
  • 最后登录2019-11-26
  • 发帖数165
  • 金币124枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
10楼#
发布于:2018-10-30 13:07
好东西,支持下.........
zhuyikang
初学者
初学者
  • 最后登录2020-09-03
  • 发帖数128
  • 金币24枚
  • 贡献勋章0枚
11楼#
发布于:2020-06-02 09:42
好东西,支持下.........
cbl021733
技术员
技术员
  • 最后登录2020-09-22
  • 发帖数95
  • 金币347枚
  • 贡献勋章0枚
  • 社区居民
12楼#
发布于:2020-06-12 07:41
have a look!
游客

返回顶部
支付

欢迎打赏,请选择打赏金额

  • 1元
  • 6元
  • 10元
  • 66元
  • 100元

支付即代表同意《本站支付协议》 有疑问请联系客服