首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NameError:未定义名称“”width“”。“”

NameError:未定义名称“”width“”。“”
EN

Stack Overflow用户
提问于 2021-02-22 02:51:07
回答 1查看 144关注 0票数 -3
代码语言:javascript
复制
import cv2
import numpy as np

kam = cv2.VideoCapture(0)
foto = cv2.imread('resim.jpg')
def foto_cevirme(fotogir):
    hsv = cv2.cvtColor(fotogir,cv2.COLOR_BGR2HSV)

    fotogir = cv2.blur(fotogir,(3,3))


    lower_red = np.array([0,120,70])

    upper_red = np.array([10,255,255])

    mask1 = cv2.inRange(hsv, lower_red, upper_red)
  

    lower_red = np.array([170,120,70])

    upper_red = np.array([180,255,255])

    mask2 = cv2.inRange(hsv,lower_red,upper_red)


    mask1 = mask1+mask2
    (contours,hierarchy) = cv2.findContours(mask1.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    for c in contours:
      if cv2.contourArea(c) < 500:
        continue
      (x,y,w,h) = cv2.boundingRect(c)
      cv2.rectangle(fotogir,(x,y),(x+w,y+h),(255,0,0),3)
      global face_width 
      face_width = w
    return face_width

    res1 = cv2.bitwise_and(fotogir,fotogir,mask=mask1)
    cv2.imshow("foto",fotogir)

known_distance = 40  # kameraya uzaklik
known_width = 20   # yüzünüzün ortalam genisligi

def focal_length(measured_distance, real_width, width_in_rf_image):
   focal_length = (width_in_rf_image * measured_distance)/ real_width
   return focal_length

def distance_finder(Focal_length,real_face_width,face_width_in_frame):
   distance = (real_face_width* Focal_length)/ face_width_in_frame 
   return distance


fotokare = foto_cevirme(foto) 
ref_image_face_width = fotokare
focal_length_found = focal_length(known_distance,known_width,ref_image_face_width)
fonts = cv2.FONT_HERSHEY_COMPLEX


while True:
  
  ret, goruntu = kam.read()


  hsv = cv2.cvtColor(goruntu,cv2.COLOR_BGR2HSV)

  goruntu = cv2.blur(goruntu,(8,8))


  lower_red = np.array([0,120,70])

  upper_red = np.array([10,255,255])

  mask1 = cv2.inRange(hsv, lower_red, upper_red)


  lower_red = np.array([170,120,70])

  upper_red = np.array([180,255,255])

  mask2 = cv2.inRange(hsv,lower_red,upper_red)


  mask1 = mask1+mask2
  (contours,hierarchy) = cv2.findContours(mask1.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)


  for c in contours:
    if cv2.contourArea(c) < 500:
      continue
    else:
      exit
    (x,y,w,h) = cv2.boundingRect(c)

    genislik = w
  

  Distance = distance_finder(focal_length_found,known_width,genislik)
  cv2.putText(goruntu,f"Uzaklik = {Distance}",(50,50),fonts,1,(0,0,255),2)

  res1 = cv2.bitwise_and(goruntu,goruntu,mask=mask1)

  cv2.imshow("orj",goruntu)

  cv2.imshow("mask",mask1)
  cv2.imshow("res",res1)
  
  
  if cv2.waitKey(30) & 0xFF == ord('q'):
    break
    

kam.release()
cv2.destroyAllWindows()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 07:02:08

我试图使用评论部分来解释这一点。让我分享截图来解释。

您需要通过分配默认值来求解变量 genislik。for 循环中的代码永远不会被执行。代码中的 exit 命令实际上会退出程序,而不仅仅是循环。我假设你试图exit循环。在图像退出实际上取消了程序。改为break。

你在这里也有类似的挑战。您需要为以下项设置默认值face_width否则,它将给出一个错误,声明face_width未定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66305879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档