2015-06-01 5 views
1

Привет Я хочу проверить разрешение своей камеры. Обычно я устанавливаю это вручную, разрешение (w, h) 320,480 ...Список разрешений (OpenCv, Python, Camera)

Теперь я хочу, чтобы установить разрешение списка = [(...)] в цикле или лучше в функции, что он дает мне каждый выход автоматически, поэтому мне не нужно писать каждое разрешение за руку. Я много пробовал, но не понимаю.

надеюсь кто-то может мне помочь

thx!

Код:

import sys 
sys.path.append("C:\\opencv\\build\\python\\2.7") 
import cv2 
import cv2.cv as cv 
import time 

capture = cv2.VideoCapture(0) 

num_frame = 0 

resolution = [(320,480),(640,480),(704,680),(960,680),(1280,720),(1440,720),(1920,1080)] 

w = 320 
h = 480 

size = capture.get(cv.CV_CAP_PROP_FRAME_WIDTH), capture.get(cv.CV_CAP_PROP_FRAME_HEIGHT) 

size_new = capture.set(cv.CV_CAP_PROP_FRAME_WIDTH, w),capture.set(cv.CV_CAP_PROP_FRAME_HEIGHT,h) 

print size 

start = time.time() 

while(True): 
    ret, frame = capture.read() 
    if num_frame < 60: 
     num_frame = num_frame + 1 
    else: 
     break 

total_time = (time.time() - start) 
fps = (num_frame/total_time) 
print str(num_frame) + ' Frames ' + str(total_time) + ' Sekunden = ' + str(fps) + ' fps' 

capture.release() 
cv2.destroyAllWindows() 
+0

ли работает нормально текущий код? Если да, вам просто нужно инкапсулировать код внутри функции и вызвать его внутри цикла for, итерации по списку 'resolution' – ZdaR

+0

Код woks отлично! Но как я могу поместить его в функцию, вызывающую ее внутри цикла? Это моя проблема. Можете, пожалуйста, показать мне это. Thx – Jan

ответ

1

Вы можете просто сделать это путем инкапсуляции сценария внутри функции и назвав его по резолюциям в списке пока перебор списка.

На самом деле код был довольно быстро, так total_time = (time.time() - start) оценивали к нулю в некоторых случаях и, следовательно, дает ошибку: ZeroDivisionError: float division by zero на линии fps = (num_frame/total_time), так как Total_time оценивал 0, так что я добавил time.sleep(0.001), чтобы избавиться от этой ошибки ,

import cv2 
import cv2.cv as cv 
import time 

resolution = [(320,480),(640,480),(704,680),(960,680),(1280,720),(1440,720),(1920,1080)] 

def change_resolution(w, h): 

    capture = cv2.VideoCapture(0) 

    num_frame = 0 

    size = capture.get(cv.CV_CAP_PROP_FRAME_WIDTH), capture.get(cv.CV_CAP_PROP_FRAME_HEIGHT) 

    size_new = capture.set(cv.CV_CAP_PROP_FRAME_WIDTH, w),capture.set(cv.CV_CAP_PROP_FRAME_HEIGHT,h) 

    print size 

    start = time.time() 

    while(True): 
     ret, frame = capture.read() 
     if num_frame < 60: 
      num_frame = num_frame + 1 
      time.sleep(0.001) 
     else: 
      break 

    total_time = (time.time() - start) 
    fps = (num_frame/total_time) 
    print str(num_frame) + ' Frames ' + str(total_time) + ' Sekunden = ' + str(fps) + ' fps' + ' for width: ' + str(w) + ' height: ' + str(h) 

    capture.release() 
    cv2.destroyAllWindows() 


for reso in resolution: 
    change_resolution(reso[0], reso[1]) 

Выход:

(0.0, 0.0) 
60 Frames 0.0599999427795 Sekunden = 1000.00095368 fps for width: 320 height: 480 
(0.0, 0.0) 
60 Frames 0.0639998912811 Sekunden = 937.501592564 fps for width: 640 height: 480 
(0.0, 0.0) 
60 Frames 0.0599999427795 Sekunden = 1000.00095368 fps for width: 704 height: 680 
(0.0, 0.0) 
60 Frames 0.0599999427795 Sekunden = 1000.00095368 fps for width: 960 height: 680 
(0.0, 0.0) 
60 Frames 0.0599999427795 Sekunden = 1000.00095368 fps for width: 1280 height: 720 
(0.0, 0.0) 
60 Frames 0.0599999427795 Sekunden = 1000.00095368 fps for width: 1440 height: 720 
(0.0, 0.0) 
60 Frames 0.0599999427795 Sekunden = 1000.00095368 fps for width: 1920 height: 1080 
+0

что ist change_resolution (reso [0], reso [1]) doin? ist reso [0] улавливать w и reso [1] h? спасибо ZdaR ;-) – Jan

+0

'change_resolution()' - это функция, в которой вы можете изменить значения 'w' и' h', напротив предыдущего сценария, в котором значения 'w' и' h' были постоянными @Jan, вы можете принять ответ, отметив его зеленым тиком, если это вам поможет. :) – ZdaR

+0

где зеленый тик? :-) – Jan

Смежные вопросы