programing

cv2.imshow 명령이 opencv에서 제대로 작동하지 않습니다.

itmemos 2023. 9. 19. 20:51
반응형

cv2.imshow 명령이 opencv에서 제대로 작동하지 않습니다.

opencv 2.4.2, python 2.7을 사용하고 있습니다.다음 간단한 코드는 올바른 이름의 창을 만들었지만 내용은 비어 있고 이미지가 표시되지 않습니다.

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)

이 문제에 대해 아는 사람 있습니까?

imshow()다에서만 합니다.waitKey():

import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()

(창 업데이트에 필요한 전체 메시지 루프가 그 안에 숨겨져 있습니다.)

여기서 제게 맞는 답을 찾았습니다. http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

대화형 ipython 세션을 실행하고 높은 창을 사용하려면 cv2.startWindowThread()를 먼저 수행합니다.

상세 정보:High GUI는 OpenCV 코드에서 이미지와 비디오를 표시하기 위한 단순화된 인터페이스입니다.다음과 같이 간단해야 합니다.

import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)

사용해야 합니다.cv2.waitKey(0)cv2.imshow("window",img) 그래야만 효과가 있을 것입니다.

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)

Python 콘솔 내에서 실행 중인 경우 다음 작업을 수행합니다.

img = cv2.imread("yourimage.jpg")

cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()

그런 다음 이미지를 누르면 이미지가 성공적으로 닫히고 다른 명령을 실행할 수 있습니다.

더하다cv2.waitKey(0)마침내.

방법 1:

다음 코드가 저에게 효과가 있었습니다.destroyAllWindows()를 추가해도 창이 닫히지 않았습니다.마지막에 cv2.waitKey(1)를 추가하면 작업이 완료되었습니다.

im = cv2.imread("./input.jpg")
cv2.imshow("image", im)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)

크레딧 : https://stackoverflow.com/a/50091712/8109630

초보자를 위한 참고 사항:

  • 이렇게 하면 노트북에 인라인으로 표시되는 대신 별도의 창에서 이미지가 열립니다.그래서 나중에 모든 윈도우()를 닫으려면 destroyAllWindows()를 사용해야 합니다.
  • 따라서 별도의 창이 뜨지 않으면 현재 창 뒤에 있는지 확인합니다.
  • 이미지를 본 후 키를 눌러 팝업 창을 닫습니다.

방법 2:.

주피터 노트북에 표시하고 싶다면요.

from matplotlib import pyplot as plt
import cv2

im = cv2.imread("./input.jpg")
color = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
plt.imshow(color)
plt.title('Image')
plt.show()

저도 같은 문제에 직면했습니다. IDLE다를 했습니다.cv2.imshow() 창이 로 됩니다.pythonw.exe창을 닫으려고 할 때 응답하지 않습니다.

아래 게시물은 이러한 현상이 발생하는 이유에 대해 가능한 설명을 제공합니다.

pythonw.exe가 응답하지 않습니다.

"기본적으로 IDLE에서 이 작업을 수행하지 않습니다. .pyw 확장자로 이름을 지정하고 두 번 클릭하여 스크립트를 작성하고 창에 있는 경우 셸 또는 스크립트에서 직접 실행합니다. IDLE의 자체 이벤트 루프와 GUI 툴킷의 이벤트 루프 간에 충돌이 있는 것으로 보입니다."

내가 사용할때imshow()IDLE를 통해 직접 실행하는 것이 아니라 스크립트에서 실행할 수 있었습니다.

이렇게 해결했습니다.

import cv2
from matplotlib import pyplot
    
img = cv2.imread('path')
pyplot.imshow(img)
pyplot.show()

waitKey()가 0보다 큰 숫자로 작업합니다.

    cv2.waitKey(1)

이 실 어딘가에 필요한 모든 것들이 있습니다.

if cv2.waitKey(): cv2.destroyAllWindows()

저는 IDLE에서 잘 작동합니다.

만약 당신이 이것을 작동시키지 않았다면, 당신은 다음과 같이 하는 것이 좋습니다.

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)

하나의 파일로 만들어서 실행합니다.

이후에는 추가적인 방법이 필요 없습니다.waitKey(0)(위 코드에 대한 reply)

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
cv2.waitKey(0)

창이 나타납니다. -> 창을 클릭하고 Enter를 클릭합니다.창이 닫힙니다.

64비트 시스템에서 오류를 방지하려면 이 cv2.waitKey(1) add 0xFF를 사용합니다.

예:

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0) & 0xFF 
cv2.destroyAllwindows()

Q 버튼을 눌러 프로그램을 중지하면 다음 명령을 사용하여 더 많은 제어를 할 수도 있습니다.

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
if cv2.waitKey(0) & 0xFF == ord('Q'):
    break
cv2.destroyAllwindows()

저도 -215 오류가 있었습니다.저는 imshow가 문제라고 생각했는데, 존재하지 않는 파일로 읽도록 변경했을 때 오류가 발생하지 않았습니다.그래서 working folder에 이미지 파일을 넣고 cv2.waitKey(0)을 추가하면 됩니다.

이 일로 해결되긴 했지만import pyautogui

"cv2.waitKey(0)"을 사용하도록 선택한 경우, 소문자 "k"가 프로그램을 동결시킬 수 있으므로 "cv2.waitKey(0)" 대신 "cv2.waitKey(0)"로 적었는지 확인합니다.

오류: (-215) 크기.폭>0 & & size.hight>0 in function imshow

이미지를 찾을 수 없기 때문에 이 오류가 발생합니다.즉, imshow 기능의 오류가 아닙니다.

C:\Folder1\Folder2\filename.ext와 같이 이미지에 전체 경로를 제공하여 극복할 수 있었던 215 오류가 있었습니다.

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
cv2.destroyAllwindows()

이 코드를 사용해 보세요 :)

사진을 보면서도 콘솔에 액세스하려면 다음과 같이 하십시오.차례로 표시될 영상 목록을 전달할 수도 있습니다.

from threading import Thread
from typing import Union
import numpy as np
import cv2
from time import sleep


def imshow_thread(
    image: Union[list, np.ndarray],
    window_name: str = "",
    sleep_time: Union[float, int, None] = None,
    quit_key: str = "q",
) -> None:
    r"""
    Usage:

    import glob
    import os
    from z_imshow import add_imshow_thread_to_cv2 #if you saved this file as z_imshow.py
    add_imshow_thread_to_cv2() #monkey patching
    import cv2
    image_background_folder=r'C:\yolovtest\backgroundimages'
    pics=[cv2.imread(x) for x in glob.glob(f'{image_background_folder}{os.sep}*.png')]
    cv2.imshow_thread( image=pics[0], window_name='screen1',sleep_time=None, quit_key='q') #single picture
    cv2.imshow_thread( image=pics, window_name='screen1',sleep_time=.2, quit_key='e') #sequence of pics like a video clip

        Parameters:
            image: Union[list, np.ndarray]
                You can pass a list of images or a single image
            window_name: str
                Window title
                (default = "")
            sleep_time: Union[float, int, None] = None
                Useful if you have an image sequence.
                If you pass None, you will have to press the quit_key to continue
                (default = None)
            quit_key: str = "q"
                key to close the window
        Returns:
            None

    """
    t = Thread(target=_cv_imshow, args=(image, window_name, sleep_time, quit_key))
    t.start()


def _cv_imshow(
    cvimages: Union[list, np.ndarray],
    title: str = "",
    sleep_time: Union[float, int, None] = None,
    quit_key: str = "q",
) -> None:

    if not isinstance(cvimages, list):
        cvimages = [cvimages]

    if sleep_time is not None:
        for cvimage in cvimages:
            cv2.imshow(title, cvimage)
            if cv2.waitKey(1) & 0xFF == ord(quit_key):
                break
            sleep(sleep_time)
    else:
        for cvimage in cvimages:
            cv2.imshow(title, cvimage)
            cv2.waitKey(0)
            cv2.destroyAllWindows()
            cv2.waitKey(1)
    cv2.destroyAllWindows()


def add_imshow_thread_to_cv2():
    cv2.imshow_thread = imshow_thread  # cv2 monkey patching
    # You can also use imshow_thread(window_name, image, sleep_time=None)
    # if you dont like monkey patches

언급URL : https://stackoverflow.com/questions/21810452/cv2-imshow-command-doesnt-work-properly-in-opencv-python

반응형