TÔI MUỐN SỬ DỤNG OPENCV TRONG CHƯƠNG TRÌNH MẪU PYTHON CHO CAMERA DÒNG CS/EG (ĐỐI VỚI CAMERA ĐƠN SẮC)

Chương trình mẫu Python dành cho camera dòng CS/ EG không được mã hóa để sử dụng với OpenCV. Đây là mã chung mà không phụ thuộc vào thư viện cố định nào.

 

Dưới đây chúng tôi sẽ giới thiệu “GrabImage.py” làm ví dụ.

Python-OpenCV sử dụng dữ liệu có nhiều khối và dữ liệu hình ảnh được coi là một mảng numpy.  Trong GrabImage.py, hình ảnh được lấy bằng cách sử dụng MV_CC_GetOneFrameTimeout() trong work_thread() và dữ liệu hình ảnh được truyền trong pData, nhưng đây là một con trỏ trong ngôn ngữ C và OpenCV không thể xử lý được như hiện tại. Vì vậy, cần chuyển đổi pData này thành mảng numpy.

 

1)Thêm hai dòng lệnh import sau đây.

  • import numpy as np
  • import cv2

 

2)Thêm dòng sau để đặt đầu ra định dạng dữ liệu hình ảnh từ máy ảnh sang đơn sắc trước dòng ret = cam.MV_CC_StartGrabbing() trong __main__.

  • ret = cam.MV_CC_SetEnumValueByString(“PixelFormat”,” Mono8″)

 

3)Bên trong Work_thread(), thêm mã để chuyển đổi pData thành mảng numpy. (Thêm hai dòng: cv2.imshow() và cv2.waitKey() để bạn có thể kiểm tra hình ảnh)

 

def work_thread(cam=0, pData=0, nDataSize=0):

    stFrameInfo = MV_FRAME_OUT_INFO_EX()

    memset(byref(stFrameInfo), 0, sizeof(stFrameInfo))

    while True :

        ret = cam.MV_CC_GetOneFrameTimeout(pData, nDataSize, stFrameInfo, 1000)

        if ret == 0:

            print (“get one frame: Width[%d], Height[%d], nFrameNum[%d]”  % (stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nFrameNum))

            image = np.asarray(pData._obj)

            image = image.reshape((stFrameInfo.nHeight, stFrameInfo.nWidth))

            cv2.imshow(“show”, image)

            cv2.waitKey(1)

        else:

            print (“no data[0x%x]” % ret)

        if g_bExit == True:

            break