2017-05-18 5 views
0

初級レベルTypeError例外:非整数型の「モジュール」によってシーケンスを乗算することができない

このコードspeedでは、キーボード入力され、distanceは、起動している中間及び終了値と時間が変化するので、私は書かれていましたdistance = speed * timeの式を使用するコードが動作していません。

なぜこのエラーが発生するのですか?解決方法は何か?

import numpy as np 
import cv2 
import time 

cap = cv2.VideoCapture(0) #input object 

# frames iterator 
i = 0; 

# To capture number of frames 
no_of_frames = 0 

# coordinates to print time on x and y location 
x = 30 
y = 30 

# take speed as input from keyboard 
speed = input() 

#total distance 
start_distance = 0 
total_distance = 75 
mid_distance = int(total_distance/2) 

# video start time 
start_time = time.time() 

# start capturing frames 
while(cap.isOpened()):  
    ret, frame = cap.read() 
    if ret==True: 
     cv2.imshow('frame',frame) 

     distance = speed * time   
     # capture frame 
     #if t == start_distance or t == mid_distance or t == total_distance: 
     if distance == start_distance or distance == mid_distance or distance == total_distance: 

      # calculate time 
      hours, rem = divmod(time.time() - start_time, 3600) 
      minutes, seconds = divmod(rem, 60) 

      # set elapsed time 
      elapsed_time = "{:0>2}:{:0>2}:{:05.2f}".format(int(hours),int(minutes),seconds) 

      # print elapsed time on frame 
      cv2.putText(frame,str(elapsed_time), (x,y), cv2.FONT_HERSHEY_PLAIN, 1, 255) 

      # capture frame 
      cv2.imwrite('output_frame_'+str(i)+'.jpg',frame) 
      no_of_frames = no_of_frames + 1 
      #print(t) 

     i=i+1 
     if no_of_frames >=3: 
      break 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
      break 
     else: 
      break 

# Release everything if job is finished 
cap.release() 
#out.release() 
cv2.destroyAllWindows() 

私はこのエラーを取得する:

TypeError Traceback (most recent call last) in() 32 33 cv2.imshow('frame',frame) ---> 34 distance = speed * time 35 if distance == start_distance or distance == mid_distance or distance == total_distance: 36 TypeError: can't multiply sequence by non-int of type 'module'

+0

エラーを表示してください –

+2

'speed * time'では' time'変数が定義されておらず、 'time'は' import time'でインポートしたモジュールなのでエラーです。 で – Pavan

+0

@Chritopher BottonmsはTypeErrorトレースバック(最新のコール最後) () 32 33 cv2.imshow( 'フレーム'、フレーム) ---> 34距離=速度*時間 距離==開始距離または距離==中央距離または距離== total_distance: TypeError: 'module'タイプの非整数でシーケンスを掛けることはできません – Sober

答えて

0

問題は、あなたがtimeを乗算さであり、それはTimeモジュールの名前である、あなたは、時間のいずれかの方法を使用して乗算し、それを使用する必要があります。たぶんstart_timeが、私はこの変数の正確な目的を知らない。

また、乗算で使用するにはspeedをintにキャストする必要があります。私はあなたがドキュメントあなたのループ内

http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html

#Define the codec and create VideoWriter object 
fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) 

そしてからint型

を取得したいと仮定します。

out.write(frame) 

これは

+0

私はtime.time()を置き換えました。私はスピードをintにキャストしましたが、今はビデオを撮るだけです。画像をキャプチャしていません – Sober

+0

何のエラーが出ますか?あなたはどのような出力を持っていますか? – Ivan

+0

それはちょうどビデオを再生しているとエラーが言及されておらず、また画像もキャプチャしていません – Sober

0
を動作するかどうか、私に教えてください

以降は、パッケージではなく変数であり、あなたは現在の時刻を保持する変数を作成する必要があります。

current_time = time.time() 
distance  = speed * current_time 

それともので、現在の時刻を得ることができます。

distance  = speed * time.time() 

は私を取得しないでください違う。私はPythonが好きですが、これはPerlやPHPのような言語が$@のような記号を使って変数を表す理由の一例です。これらの言語では、単一の値を保持するtimeという名前の変数は$timeと書かれ、同じ名前を持つ関数(またはモジュール)はtimeと書かれます。したがって、2つを混同することは難しいでしょう。

関連する問題