2017-11-20 20 views
0

opencvを使って長方形(高さと幅を表示する)を検出するPythonコードを作成しましたが、カメラからオブジェクトまでの距離を決定しますが、 (以下に見つけることができます)何が間違っているのか分かりません誰かが私を助けることができれば感謝します私は見つけることができたが、まだエラーを取り除くことができないすべての可能な解決策を試してみました。Opencv python2.7を使用して矩形を検出する

ERROR

yuv_red = cv2.cvtColor(フレーム、cv2.COLOR_BGR2YUV) エラー:C:\が\ OpenCVの\モジュール\ imgproc \ SRC \ color.cpp \ master_PackSlaveAddon-のWin32-VC12静電気を構築:8059:エラー:(-215)scn == 3 ||機能品種でSCN == 4 :: cvtColorあなたが誤って括弧を持つバイラテラルフィルタを実装ラインで

import sys 
sys.path.append('C:\Python27\Lib\site-packages') 
import cv2 
import numpy as np 
import argparse 
import math 

############################# Capturing Video Through Camera ######################## 
cap = cv2.VideoCapture(0) 

############# Distance to Camera initial value set to zero ########################## 
Distance_to_Camera=0 

while(True): 

################################# Capture frame-by-frame ########################### 
    ret, frame = cap.read() 

############################ Converting frame(img i.e BGR to YUV) ################### 
    yuv_red = cv2.cvtColor(frame, cv2.COLOR_BGR2YUV) 

    red_color = np.uint8([[[0,0,255]]]) 
    yuv_color = cv2.cvtColor(red_color,cv2.COLOR_BGR2YUV) 
    print yuv_color 

############################### Processing of Image ############################## 

##################### Defining the Range of Red Colour ########################### 
    red_lower = np.array([136,87,111],np.uint8) 
    red_upper = np.array([180,255,255],np.uint8) 

##################### Finding the Range of Red Colour in the image ################### 
    mask = cv2.inRange(yuv_red, red_lower,red_upper) 

####################### Morphological Transformation, Dilation ####################### 

    res = cv2.bitwise_and(frame, frame, mask = mask) 

##################################################################################### 
    gray = cv2.cvtColor(res,cv2.COLOR_BGR2GRAY)  #Converting the BGR res to Gray 
    blurred = cv2.GaussianBlur(gray, (5,5), 5)  #Blur Image to remove noise 
    blur = cv2.bilateralFilter(blurred, 5,50,50)  #Smooth the image 
    median = cv2.medianBlur(blur,5)     #Reduce noise from image 
    thresh = cv2.threshold(median, 3, 255, cv2.THRESH_BINARY)[1] #To achieve a better output of white and black 

    frame2, contour, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 

##################### Splitting and Merging Image channels ########################### 
    b,g,r = cv2.split(res) 
    ttl = res.size/3 
    Ra = float(np.sum(r))/ ttl 
    print Ra 

    if Ra > 1: 
     c = contours[0] 
     M = cv2.moments(c) 
     x = int(M['m10']/M['m00']) 
     y = int(M['m01']/M['m00']) 

     x,y,w,h = cv2.boundingRect(c) 
     epsilon = 0.01*cv2.arcLength(c, True) 
     approx = cv2.approxPolyDP(c, epsilon, True) 
     perimeter = cv2.approxLength(c,True) 
     area = cv2.contourArea(c) 
     ah = h/40 
     aw = w/40 



     Distance_to_Camera = round(math.sqrt(315/area),4) 
     print Distance_to_Camera 

     approx = cv2.approxPolyDP(c, epsilon, True) 
     print len(approx) 
     shape = len(approx) 

     if shape == 4: 
      print " 4 Sides" 
      rect = cv2.minAreaRect(c) 
      box = cv2.boxPoints(rect) 
      box = np.int0(box) 
      cv2.drawContours(frame,ArithmeticError[box],0,(0,0,255),0) 
      print box 

     if ah == aw: 
################################ Displaying Text on the Image ################################ 
      print "Unknown" 
      cv2.putTextputText(frame,"Unknown",(x+150,y+150),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),4) 
     else: 

################################ Displaying Text on the Image ################################   

      print "Rectangle" 
      cv2.putTextputText(frame,"Rectangle",(x+150,y+150),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),4) 

      output = ("Distance="+str((round((distance+0.0004)*1000))) + "cm" + "X=" + str(aw)+"cm" +"Y="+str(ah)+"cm"+"Perimeter=" +str(round(perimeter/40))+"cm"+"Area="+str(round((area/1.64)/1000))+"cm^2") 
      cv2.imshow('gray',frame) 

    else: 
     cv2.imshow('gray',frame) 

########################################## Output ########################################## 
     cv2.imshow('gray',frame) 
     cv2.imshow('grayscaled',thresh) 

    if cv2.waitKey(20) & 0xFF == 27: 
     break 

##if k == 27:   # wait for ESC key to exit 
## cv2.destroyAllWindows() 

# When everything done, release the capture 
    cv2.destroyAllWindows() 
    cap.release() 



















    [1]: https://i.stack.imgur.com/qB2rx.png 
+1

命令 'if Ra> 1:'の後にインデントの問題があります。他にも多くの間違いがあります( ':'が間違っている、インデントが間違っているなど)。 IDEを使用する方法や、デバッグのヒントを得るためにcmdを使用してプログラムを起動する方法を学ぶ必要があります。 – Lescurel

+0

@Lescurel私はコードを編集し、あなたが示唆したように変更を加えましたが、同じエラーメッセージが表示されます。「プログラムの構文に誤りがあります」とコードの中央値が強調表示されています。 –

答えて

0

blur = cv2.bilateralFilter(blurred, (5,50,50)

適切な使用を参照してくださいdocs for cv2.bilateralFilter()をチェックしてください。

+0

私はそれを変更し、それほど感謝しましたが、今私は別のエラーと言っている: "領域== 0:NameError:名前 'エリア'は定義されていません" –

+0

私はこれを否定的な意味で、このサイトはデバッグサービスではないため、これらのエラーを自分で確認するにはこれらの値を表示する必要があります。とにかく 'Ra> 1 'ならば' area'だけを割り当てます。したがって 'Ra <= 1'の場合、実際に' if area == 0'をチェックする前にエリアが定義されていません。 –

+0

コメントをいただきありがとうございます。私は私が痛みを感じている可能性があることを知っており、このエラーの可能な解決方法を試しましたが、動作するようには見えません。 "yuv_red = cv2.cvtColor(frame、cv2.COLOR_BGR2YUV ) エラー:C:\ builds \ masterpackSlaveAddon-win32-vc12-static \ opencv \ modules \ imgproc \ src \ color.cpp:8059:エラー:(-215)scn == 3 || scn == 4 in function cv :: cvtColor " –

関連する問題