Python下Opencv尝试调用海康GIGE工业相机

环境

一、相机型号(海康): HIKVison MV-CE013-50GC
二、win10 x86_64
三、Python3.6.5、OpenCV3.4
四、需要结合海康SDK

拿到的童鞋,估计要慌了,官网并没有给出Python的开发文档,其实官网下载MVS(官网客户端)后,在安装目录下Develoment\Sample\下:Python下Opencv尝试调用海康GIGE工业相机_第1张图片
看到了熟悉的大Python。
里面的GrabImage.py。调用C接口,进行的。不懂也没关系。思路是拿到数据流,然后利用OpenCV进行操作。其实利用cv2.VideoCapture调用电脑自带摄像头是没问题的。然鹅,调用GIGE就不行了。
不废话,直接看代码:

# 找到SDK中的GrabImage.py
# 为线程定义一个函数
def work_thread(cam=0, pData=0, nDataSize=0):

    stFrameInfo = MV_FRAME_OUT_INFO_EX()
    memset(byref(stFrameInfo), 0, sizeof(stFrameInfo))
    while True:
        # print(pData)   此处获得是3686400字节的c_ubyte_Array 。why?因为我的分辨率1280*960,3通道
        # np.set_printoptions(threshold=np.inf)
        temp = np.asarray(pData)   # 将c_ubyte_Array转化成ndarray得到(3686400,)
        temp = temp.reshape((960, 1280, 3))   #  根据自己分辨率进行转化
        # print(temp)
        # print(temp.shape)
        temp = cv2.cvtColor(temp, cv2.COLOR_BGR2RGB)  # 这一步获取到的颜色不对,因为默认是BRG,要转化成RGB,颜色才正常
        cv2.namedWindow("result", cv2.WINDOW_AUTOSIZE)
        cv2.imshow("result", temp)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        ret = cam.MV_CC_GetOneFrameTimeout(byref(pData), nDataSize, stFrameInfo, 1000)
        if ret == 0:
            print ("get one frame: Width[%d], Height[%d], nFrameNum[%d]"  % (stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nFrameNum))
        else:
            print ("no data[0x%x]" % ret)
        if g_bExit == True:
                break

这样就可以看到有实时视频输出了,其他需求根据自己需要进行更改,我是要在TX2上运行yolov3,对物体进行检测,不知道在arm64上会遇到什么问题,等待被虐。。。。

你可能感兴趣的:(技术分享)