2017-11-20 1 views
0

opencv를 사용하여 길이와 너비를 표시하는 사각형을 감지하는 python 코드를 작성하여 카메라에서 객체까지의 거리를 결정하지만 코드를 실행할 때이 오류가 발생합니다. (아래에서 찾을 수 있습니다.) 내가 뭘 잘못했는지 모르겠지만 누군가가 나를 도울 수있는 모든 해결책을 시도했지만 찾을 수 있지만 여전히 오류를 제거 할 수 있다면 그것을 감사하겠습니다.Opencv python2.7을 사용하여 사각형 찾기

ERROR

yuv_red = cv2.cvtColor (프레임 cv2.COLOR_BGR2YUV) 오류 : C는 : \ 빌드 \ master_PackSlaveAddon-는 Win32-VC12 정전기 \의에서 OpenCV \ 모듈 \ imgproc \ SRC \ color.cpp : 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 == 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 " –

관련 문제