通过打开cv获取键盘的边界

时间:2018-04-17 10:19:34

标签: python opencv

我正在使用opencv和python中的虚拟键盘。我需要检测最大的轮廓以获得键盘的边界和角落的坐标。

这是我真正需要的:

enter image description here

这是我的代码:

import numpy as np
import cv2
import requests

url = 'http://192.168.1.100:8080/shot.jpg'

while (True):

  imgResp = requests.get(url)
  imgNp = np.array(bytearray(imgResp.content), dtype=np.uint8)
  frame = cv2.imdecode(imgNp, -1)

  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  ret1, thresh1 = cv2.threshold(hsv, 100, 255, cv2.THRESH_BINARY)

  thresh1, contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
  cv2.drawContours(frame, contours, -1, (0, 255, 0), 3)


  cv2.imshow('thresh1', thresh1)
  cv2.imshow('frame', frame)

  # Q Quit
  if cv2.waitKey(1) & 0xFF == ord('q'):
     break

cv2.destroyAllWindows()

2 个答案:

答案 0 :(得分:0)

不是自己绘制轮廓,而是需要在最大轮廓周围找到边界框

找到最大的轮廓并使用cv2.boundingRect()绘制边界框:

x,y,w,h = cv2.boundingRect(cnt)
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)

其中cnt是图像中最大的轮廓,矩形的4个角是x, y, x+w, y+h

查看此LINK中给出的边界矩形部分,以帮助您解决问题。

答案 1 :(得分:0)

使用$response = $client->get($url, ['proxy' => 'http://someproxy','timeout' => 10, 'cookies' => $jar]);

,而不是使用cv2.RETR_LIST参数
cv2.RETR_EXTERNAL

结帐this教程以获取更多信息。