<button id="ssm6u"><optgroup id="ssm6u"></optgroup></button>
  • 跳轉至

    Ubuntu虛擬機里使用USB攝像頭獲取圖像

    概要

    在這一講里, 阿凱將會帶大家在virtualbox中運行opencv的程序, 并且讀取usb攝像頭的圖像。
    在運行程序之前, 你需要在VirtualBox上安裝對應的拓展包. 然后, 阿凱還詳細講解了opencv中調用VideoCapture獲取圖像并展示在窗口的程序. 通過這篇文章的操作, 你可以檢測你的USB設備是否可以在虛擬機里正常讀取, 另外, 測試你配置的opencv開發環境是否正常.

    keywords Ubuntu 虛擬機 USB設備 掛載

    不能讀取USB設備的尷尬境地

    首先你得有一個USB攝像頭, 請不要問阿凱USB攝像頭的選型。 能用就好, 最好免驅動。

    我們點開VirtualBox的該虛擬機的管理頁中的usb設備一欄中, 可以看到從usb1.0 到usb3.0我們統統不能選擇。

    VisualBox拓展的下載與安裝與USB攝像頭讀取_20180117213652

    打開usb攝像頭的軟件

    cheese
    

    我們看到也是黑漆漆的一片, 并沒有圖像讀取出來。

    VirtualBox拓展插件的安裝

    原來, 如果要使用USB設備, 我們需要安裝VirtualBox的拓展包。

    拓展包的版本必須跟你的VirtualBox的版本一致。

    那么, 如何查看自己的VirtualBox的版本呢?

    運行VirtualBox, 在菜單欄里選幫助, 點擊關于VirtualBox 查看你當前的版本。

    VisualBox拓展的下載與安裝與USB攝像頭讀取_20180117213801

    我們到官網上去下載拓展包。

    https://www.virtualbox.org/wiki/Downloads

    如果你用的VirtualBox的版本是5.2.6的話,直接下載首頁的下載鏈接。

    0117virtualbox_extenstion_download

    如果是5.1版本的, 需要跳轉一下。

    0117virtualbox_extenstion_download_02

    5.1版本下載鏈

    https://www.virtualbox.org/wiki/Download_Old_Builds_5_1

    找到拓展包Extension Package 如下圖所示。

    0117virtualbox_extenstion_download_03

    下載后, 點擊即運行。

    0117virtualbox_extenstion_download_04

    安裝如果正常的話,就是這樣的。

    VisualBox拓展的下載與安裝與USB攝像頭讀取_20180117213628

    你得一直往下翻協議, 知道你可以點擊我接受 .

    VisualBox拓展的下載與安裝與USB攝像頭讀取_20180117213818

    選擇USB攝像頭

    拓展包安裝成功之后, 重啟虛擬機。

    然后在設備里面,選擇你需要的攝像頭設備。 (之前是沒有的, 安裝拓展才會顯示出來)

    VisualBox拓展的下載與安裝與USB攝像頭讀取_20180117213843

    創建一個腳本測試

    這里, 不要求大家看懂所有的語句, 可以運行, 測試你的usb設備可以正常讀取, 然后opencv安裝正常, 那么說明就ok的。

    阿凱配好的Ubuntu環境, 工程文件在Desktop上, 可以直接打開。

    工程文件里面的SampleCollect.py 就是采集圖像的程序。

    VisualBox拓展的下載與安裝與USB攝像頭讀取_20180117213908

    另外, 如果你是另外單獨創建這個文件的話, 請另外再創建一個叫samples的文件夾。

    SampleCollect.py

    '''
    獲取部分測試樣例
    存放在./samples文件夾下.
    
    '''
    
    import numpy as np
    import cv2
    # 如果你選了多個攝像頭的話, 需要設定VideoCapture序號, 1 or 0  or else。
    # 0 : camera on my laptop
    # 1 : usb camera
    cap = cv2.VideoCapture(1)
    
    # 這里可以設置畫面的寬度跟高度
    # cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
    # cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
    # 圖像采集計數
    img_count = 1
    
    while(True):
        # Capture frame-by-frame
        # 逐幀獲取畫面
        # ret 畫面是否獲取成功
        #   True 獲取成功
        #   False 獲取失敗
        ret, frame = cap.read()
    
        # 轉變為灰度圖
        # gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
        # 展示圖片
        # 這里的'frame' 指代的是窗口名稱為fram
        #cv2.imshow('frame', frame)
        # 鏡像翻轉, 你可能不需要
        cv2.flip(frame, -1)
        # 獲取圖片的行數 列數, 與通道數
        (rows,cols,channels) = frame.shape
    
        # 這里我旋轉了一下圖像, 因為我采集過來是橫著的,所以需要旋轉90度
        M = cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
        dst = cv2.warpAffine(frame, M, (cols,rows))
        # 顯示最終畫面。
        cv2.imshow('frame', dst)
        # 等待按鍵按下, 最多等待1ms
        key = cv2.waitKey(1)
        # 如果按鍵等于q (小寫q)
        if key == ord('q'):
            # 退出程序
            break
        elif key == ord('c'):
            # 如果按鍵是c 說明需要捕捉畫面
            cv2.imwrite("{}.png".format(img_count), dst)
            # 畫面計數+1
            img_count += 1
    
    # 程序退出的時候
    # 釋放VideoCapture
    cap.release()
    # 關閉所有窗口
    cv2.destroyAllWindows()
    

    說明, 如果要退出的話, 需要按小寫q .

    如果你按小寫q 還是沒有反應, 點擊一下opencv的窗口(任意一個) 然后按q就好了。

    成功獲取圖像

    顯示效果

    VisualBox拓展的下載與安裝與USB攝像頭讀取_20180117213930


    韩国精品无码一区二区三区,精品无码一区二区三区AV,欧洲丰满美熟女乱又伦AV,亚洲午夜久久久影院伊人