>

기어의 방향을 "위 또는 아래"로 확인하고 "결과를 화면에 인쇄합니다". 배경색은 항상 검은 색입니다.

이 장비는 "위"위치에 있습니다 :

https://imgur.com/a/DON8GJs

이 기어는 "아래로"위치에 있습니다 :

https://imgur.com/a/4ODZQAt

두 이미지와 캐니 에지 감지를 이진 시키려고했지만 찾은 것은 그 알고리즘의 결과 일뿐입니다. 기어 방향을 확인하려면 어떻게해야하는지 궁금합니다. 도와 주셔서 감사합니다.!

  • 답변 # 1

    아래로 위치는 다른 모양을 가지며, 모양 일치를 사용하여이 모양의 존재를 감지 할 수 있습니다.
    그러기 위해서는 참조 모양이 필요합니다. 가장자리를 감지하여이 이미지를 만들고 해당 이미지를 저장하고 필요한 모양 만 남기기 위해 MS 페인트를 사용했습니다.
    아래 코드는 모양을 감지하는 방법을 보여줍니다. 기어 위치를 터미널에 인쇄하고 아래 위치에 있으면 모양을 그립니다.

    Shapematch는 회전을 처리 할 수 ​​있지만, 일종의 자동화에서 사용하려면 일부 설정을 테스트하고 조정해야 할 수도 있습니다.

    결과 :

    레퍼런스 기어 이미지 :

    코드 :

    import numpy as np 
    import cv2
    # load image of reference shape
    image_reference = cv2.imread("ReferenceGear.jpg",0)
    # threshold to remove artefacts
    ret, img_ref = cv2.threshold(image_reference, 200, 255,0)
    # detect contours in image
    im, ref_cnts, hierarchy = cv2.findContours(img_ref, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # store the contour of the reference shape in a variable
    ref_cnt = ref_cnts[0]
    
    # load image 
    image = cv2.imread("gear.png")
    # detect edges in image
    edges = cv2.Canny(image,50,50)
    # detect contours of edges in image
    im, contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    # for each edge-contour in the image: try to match with te reference.
    # if the value is very small, it is a good match. store the result in a variable
    found = False
    for cnt in contours:
        ret = cv2.matchShapes(cnt, ref_cnt,3,0.0)
        if ret < 0.001:
            cv2.drawContours(image, [cnt], 0, (255), 2)
            found = True
            break
    if found:
        print("Gear is in down position")
    else:
        print("Gear is in up position")
    # show image and reference
    cv2.imshow("image", image)
    cv2.imshow("image_reference", image_reference)
    # release resources
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

관련 자료

  • 이전 라켓에서 높은 DPI 지원
  • 다음 python - 스레드를 사용할 때 Matplotlib 데이터 손상