Python, OpenCV: захват изображений с веб-камеры

У меня есть Logitech C920, подключенный к моему ПК, и я пытаюсь использовать его, чтобы щелкать изображения с помощью OpenCV.

Я знаю, что могу захватывать изображения, используя:

cam = cv2.VideoCapture(1)
s, im = cam.read() # captures image
cv2.imshow("Test Picture", im) # displays captured image
cv2.imwrite("test.bmp",im) # writes image test.bmp to disk

Но это дало мне 15-мегапиксельную фотографию, на которую способна моя камера. То, что я получаю сверху, намного уступает тому, что я могу ожидать, если я click рисую.

Итак, есть ли способ делать снимки (например, это можно сделать в официальном программном обеспечении для веб-камеры)?


person Darshan Chaudhary    schedule 05.10.2015    source источник
comment
Здравствуйте, вы видели этот предыдущий ответ? Если ваша камера совместима, вы сможете отрегулировать настройки, чтобы создать более крупное/четкое изображение. Выложу пример программы для считывания текущих настроек камеры и пример установки параметров камеры.   -  person Steven Correia    schedule 05.10.2015


Ответы (1)


После тестирования с помощью этого предыдущего вопроса в качестве руководства я написал следующую программу для проверки настроек моей камеры (веб-камера Logitech S7500 USB) . Я использую Python 2.7 и OpenCV 2.4.6 в Windows 7.

Надеюсь, вы сможете использовать этот код в качестве руководства по изменению настроек вашей камеры, чтобы получить разрешение (или близкое к нему), которое вам нужно (используя функцию set() из OpenCV).

Если вы получаете все 0,0 в качестве значений для каждой настройки камеры, возможно, у вас нет возможности регулировать настройки камеры. Я испытал это при запуске этой программы на встроенной веб-камере моего ноутбука.

from __future__ import print_function
import sys
import cv2


def main(argv):
    #capture from camera at location 0
    cap = cv2.VideoCapture(0)
    # Change the camera setting using the set() function
    # cap.set(cv2.cv.CV_CAP_PROP_EXPOSURE, -6.0)
    # cap.set(cv2.cv.CV_CAP_PROP_GAIN, 4.0)
    # cap.set(cv2.cv.CV_CAP_PROP_BRIGHTNESS, 144.0)
    # cap.set(cv2.cv.CV_CAP_PROP_CONTRAST, 27.0)
    # cap.set(cv2.cv.CV_CAP_PROP_HUE, 13.0) # 13.0
    # cap.set(cv2.cv.CV_CAP_PROP_SATURATION, 28.0)
    # Read the current setting from the camera
    test = cap.get(cv2.cv.CV_CAP_PROP_POS_MSEC)
    ratio = cap.get(cv2.cv.CV_CAP_PROP_POS_AVI_RATIO)
    frame_rate = cap.get(cv2.cv.CV_CAP_PROP_FPS)
    width = cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
    height = cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)
    brightness = cap.get(cv2.cv.CV_CAP_PROP_BRIGHTNESS)
    contrast = cap.get(cv2.cv.CV_CAP_PROP_CONTRAST)
    saturation = cap.get(cv2.cv.CV_CAP_PROP_SATURATION)
    hue = cap.get(cv2.cv.CV_CAP_PROP_HUE)
    gain = cap.get(cv2.cv.CV_CAP_PROP_GAIN)
    exposure = cap.get(cv2.cv.CV_CAP_PROP_EXPOSURE)
    print("Test: ", test)
    print("Ratio: ", ratio)
    print("Frame Rate: ", frame_rate)
    print("Height: ", height)
    print("Width: ", width)
    print("Brightness: ", brightness)
    print("Contrast: ", contrast)
    print("Saturation: ", saturation)
    print("Hue: ", hue)
    print("Gain: ", gain)
    print("Exposure: ", exposure)
    while True:
        ret, img = cap.read()
        cv2.imshow("input", img)

        key = cv2.waitKey(10)
        if key == 27:
            break

    cv2.destroyAllWindows()
    cv2.VideoCapture(0).release()


#   0  CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds.
#   1  CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next.
#   2  CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file
#   3  CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream.
#   4  CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream.
#   5  CV_CAP_PROP_FPS Frame rate.
#   6  CV_CAP_PROP_FOURCC 4-character code of codec.
#   7  CV_CAP_PROP_FRAME_COUNT Number of frames in the video file.
#   8  CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() .
#   9 CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode.
#   10 CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras).
#   11 CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras).
#   12 CV_CAP_PROP_SATURATION Saturation of the image (only for cameras).
#   13 CV_CAP_PROP_HUE Hue of the image (only for cameras).
#   14 CV_CAP_PROP_GAIN Gain of the image (only for cameras).
#   15 CV_CAP_PROP_EXPOSURE Exposure (only for cameras).
#   16 CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB.
#   17 CV_CAP_PROP_WHITE_BALANCE Currently unsupported
#   18 CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently)

if __name__ == '__main__':
    main(sys.argv)

Вот ссылка на вопрос OpenCV по этой теме и документацию OpenCV

person Steven Correia    schedule 05.10.2015
comment
Я могу записывать видео в формате Full HD и извлекать из него изображения, которые отсортированы. Чего я хотел, так это более естественного способа щелкать изображения. Я надеялся на что-то вроде: img = cv2.ClickImage(1, quality='15MP') - person Darshan Chaudhary; 05.10.2015
comment
Вам, вероятно, придется проверить документацию OpenCV, это лучший способ (и самый простой), который я нашел, который работает для меня. - person Steven Correia; 05.10.2015
comment
Я получаю AttributeError: 'module' object has no attribute 'cv' за cv2.cv - person Martin Thoma; 23.07.2017
comment
Привет, какую версию opeCV ты используешь? Вещь изменилась для OpenCV 3. Если у вас более новая версия, это может помочь -› stackoverflow.com/a/33199152/5066845 - person Steven Correia; 27.07.2017