#!/usr/bin/python
-- coding: utf-8 --
“”"
This program is debugged by Harden Qiu
“”"
import cv2
import numpy as np
#肤色识别
def skin(frame):
lower = np.array([0, 40, 80], dtype=“uint8”)
upper = np.array([20, 255, 255], dtype=“uint8”)
converted = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
skinMask = cv2.inRange(converted, lower, upper)
skinMask = cv2.GaussianBlur(skinMask, (5, 5), 0)
skin = cv2.bitwise_and(frame, frame, mask=skinMask)
return skin
#求最大连通域的中心点坐标
def centroid(max_contour):
moment = cv2.moments(max_contour)
if moment[‘m00’] != 0:
cx = int(moment[‘m10’] / moment[‘m00’])
cy = int(moment[‘m01’] / moment[‘m00’])
return cx, cy
else:
return None
#主函数
def main():
frame = cv2.imread(‘OrinMask/00007_matte.png’)
#灰度
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#高斯滤波
frame = cv2.GaussianBlur(frame, (5, 5), 0)
#二值化
ret, frame = cv2.threshold(frame, 50, 255, cv2.THRESH_BINARY)
#轮廓
contours,hierarchy = cv2.findContours(frame,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
print("number of contours:%d" % len(contours))
cv2.drawContours(frame, contours, -1, (0, 255, 255), 2)
#找到最大区域并填充
area = []
for i in range(len(contours)):
area.append(cv2.contourArea(contours[i]))
max_idx = np.argmax(area)
for i in range(max_idx - 1):
cv2.fillConvexPoly(frame, contours[max_idx - 1], 0)
cv2.fillConvexPoly(frame, contours[max_idx], 255)
'''
#求最大连通域的中心坐标
cnt_centroid = centroid(contours[max_idx])
cv2.circle(contours[max_idx],cnt_centroid,5,[255,0,255],-1)
print("Centroid : " + str(cnt_centroid))
'''
#处理后显示
cv2.imshow("Live",255-frame)
cv2.waitKey(0)
if name == ‘main’:
main()