2017-09-15 5 views
1

Google 또는 stackoverflow에서 다른 질문을 확인합니다. 스크립트에서 cv2.imshow를 실행하는 것에 대해 이야기하고 있지만 내 코드는 jupyter 노트북에서 실행됩니다. 16.4x64opencv.imshow는 jupyter 노트북 충돌을 일으킬 것입니다

  • 파이썬 3.5

  • 는 OpenCV의 3.1.0

  • 가 나는 jupyter 노트북을 시작

    1. 우분투 : 여기 여기

      내 구성입니다 코드는 노트북에 넣어 :

      %pylab notebook 
      import cv2 
      
      cvim2disp = cv2.imread('data/home.jpg') 
      cv2.imshow('HelloWorld', cvim2disp) 
      cv2.waitKey() #image will not show until this is called 
      cv2.destroyWindow('HelloWorld') #make sure window closes cleanly 
      

      이 코드를 실행할 때. 이미지가 팝업 창에 표시되지만 오른쪽 상단의 x를 클릭하여이 창을 닫을 수 없습니다. 잠시 후 시스템에서 창이 응답하지 않는다는 메시지를 표시하면 2 가지 선택 사항이 표시됩니다. " 기다림 ","포 옴 종료 ". 내가 잠깐 만났을 때, 나중에 똑같은 프롬프트를 보게 될 것입니다. '포어 종료'를하면 jupyter 노트북 커널이 죽고 다시 시작해야합니다. 내가 주변에 구글

      많은 솔루션이 코드 imshow 전에

      cv2.startWindowThread() 
      

      를 추가해야하지만, 상황 악화, 커널이 영원히 중지하는 것이 좋습니다! 아무도 어떤 일이 벌어지고 있는지 알 수 없습니다. 여기

      내 오류의 그림입니다 : enter image description here

    +0

    'cv.imshow' 정말 Jupyter 같은 클라이언트/서버 환경에서 이해가되지 않습니다. 당신은 서버 측에서 GUI 윈도우를 실행하지 않고 (클라이언트 측에서) 노트북의 일부로 이미지를 표시 할 것을 원합니다. 클라이언트와 서버가 동일한 시스템에있을 때 다소 "작동"할 수 있지만 그게 다야. | 이미 matplotlib의 'imshow' 함수를 사용하고 있습니다 (생각하는 것처럼 numpy가 아닙니다). 그래서 (색상 평면의 BGR 순서보다는 RGB를 사용한다는 것을 명심하십시오). –

    답변

    0

    다음은 API documentation for cv2.waitKey() 노트 :

    This function is the only method in HighGUI that can fetch and handle events, so it needs to be called periodically for normal event processing unless HighGUI is used within an environment that takes care of event processing.

    그래서 아마도 윈도우가 응답 할 것 무한 루프에서 함수를 호출? 나는이 테스트를하지 않은,하지만 어쩌면 당신은 다음과 같은 시도하려는 :

    import cv2 
    
    cvim2disp = cv2.imread('data/home.jpg') 
    cv2.imshow('img', cvim2disp) 
    while(True): 
        k = cv2.waitKey(33) 
        if k == -1: # if no key was pressed, -1 is returned 
         continue 
        else: 
         break 
    cv2.destroyWindow('img') 
    
    관련 문제