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 RGB)

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ừ camera thành RGB trước dòng ret = cam.MV_CC_GetIntValue(“PayloadSize”, stParam) trong __main__.

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

Phần RGB8Packed thay đổi tùy theo camera, vì vậy hãy mở MVS, kết nối camera và chọn chuỗi thích hợp từ Cây tính năng → Điều khiển Fromat hình ảnh → Định dạng pixel.

 

Hiển thị trong MVS Chuỗi tương ứng
RGB 8 RGB8Packed
BGR 8 BGR8Packed

 

 

RGB

 

 

3)Bên trong Work_thread(), hãy chèn 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,3))

            cv2.imshow(“show”, image)

            cv2.waitKey(1)

        else:

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

        if g_bExit == True:

            break