findsound()
#손가락 좌표점 표시를 위한 이미지 whiteboard=np.zeros((480,640,1)) #단일 픽셀 지정시 Perspective Transform 이 제대로 적용되지 않아 손가락 좌표를 영역으로 표시 center = (int(x), int(y)) whiteboard = cv2.drawMarker(whiteboard, center, (255,255,255), cv2.MARKER_CROSS, markerSize=2,thickness=2) #plt.imshow(whiteboard,cmap="gray") #plt.title("fingermap_before transform") #plt.show() #손가락 위치가 저장되는 이미지 fingerlocation = cv2.warpPerspective(whiteboard, PM, (640,480)) center = (600, 450) fingerlocation = cv2.drawMarker(fingerlocation, center, (255,255,255), cv2.MARKER_CROSS, markerSize=2,thickness=2) #plt.imshow(fingerlocation,cmap="gray") #plt.title("fingermap_after transform") #plt.show() #fingerlocation 이미지에서 0이 아닌 좌표값 찾기 #TRUE 인 곳의 인덱스 반환 if(np.where(fingerlocation != 0) != None): idx_TRUE=np.where(fingerlocation != 0) else: idx_TRUE=np.zeros([1,1]) idx_TRUE_X, idx_TRUE_Y = idx_TRUE #해당 인덱스 중 최초 인덱스의 X좌표 반환. 이는 변환된 좌표값임. locationX=idx_TRUE[1][0] #건반을 누른것으로 인지 if(minY<y<maxY): #검은 건반인지 흰 건반인지 판단하는 부분 if(y<midY): #하얀색 버튼 누름 #누른 손가락이 무슨 건반을 누른것인지 판단 #이때 판단하는 x좌표는 기존의 좌표가 아닌 PM 행렬을 통해 시점변환된 좌표 for n in range(0,6): if(locationX > key_white[n]): return sound_white[n] return sound_white[6] else: #검은색 건반 누름 #누른 손가락이 무슨 건반을 누른것인지 판단 #이때 판단하는 x좌표는 기존의 좌표가 아닌 PM 행렬을 통해 시점변환된 좌표 for n in range(0,5): if(key_black[2*n] < locationX < key_black[2*n+1]): return sound_black[n] return 'detect fail' else: return "no touch" |
locationfilter()
#검출 좌표 배열. 최대 7개만 검출되는 상황 가정. ''' fingerlocation = np.zero([1,2,10]) # X좌표, Y좌표, 좌표 인덱스 ''' for i in range(0,6): if(minY < fingerset[0][1][i] < maxY): #건반을 누른 손가락이 있다면 print("output coordinate is ",fingerset[0][0][i], fingerset[0][1][i]) return fingerset[0][0][i], fingerset[0][1][i] # x좌표, y좌표 리턴 #print("output coordinate is ",0 , 0) return 0,0 #없으면 0,0 리턴(안 눌린 상황) |
https://www.youtube.com/watch?app=desktop&v=m7SFeYl6IZE
'프로그래밍 > 영상처리공학' 카테고리의 다른 글
[HW 3]에지 검출과 영역 분할 (0) | 2022.12.19 |
---|---|
[HW 2]히스토그램, 이진 영상, Morphology 필터 & 기하변환 (0) | 2022.12.18 |
[HW 1]영상처리 기본, Python & OpenCV (0) | 2022.12.18 |