カメラで撮っている映像の手の輪郭?(肌の輪郭?)を検出するメソッドがあります。今のままだと肌の面積が小さいところや中くらいのところなど輪郭として囲まれる部分が複数個出てきます。問題では面積が大きい一か所だけを囲んで下さいと書いてあります。そこで自分で調べた結果,extract_contoursメソッドのreturn contoursの三つ上の行のcontoursに入るものがnumpyの配列であることがわかりました。なのでreturn numpy.amax(numpy.contours())のようにすればいいのではないかと思っているのですがどうでしょうか?
python
1 # returns contours array 2 def extract_contours(self,frame): 3 image = numpy.copy(frame) 4 # Convert BGR to HSV 5 hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) 6 hueMat = cv2.inRange(hsv, self.lower, self.upper) 7 kernel = numpy.ones((4,4),numpy.uint8) 8 9 hueMat = cv2.erode(hueMat,kernel,iterations = 3) 10 hueMat = cv2.dilate(hueMat,kernel,iterations = 6) 11 hueMat = cv2.erode(hueMat,kernel,iterations = 3) 12 13 # Bitwise-AND mask for original image and hueMat 14 res = cv2.bitwise_and(image,image, mask= hueMat) 15 16 #find contours 17 contours, _ = cv2.findContours(hueMat, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 18 cv2.drawContours(image, contours, -1, (0,255,0), 3)#draw all contours in green 19 cv2.imshow("OpenCV Sample05 contours",image) 20 return contours 21
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。