Imshow python ошибка

If you still want to have access to the console while looking at the pictures.
You can also pass a list of images which will be shown one after another.

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

If you still want to have access to the console while looking at the pictures.
You can also pass a list of images which will be shown one after another.

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

Error occurred and the program crashed when I executed cv2.imshow.

My code was just

import cv2
sscv = cv2.imread('/home/myuser/Pictures/Workspace 1_007.png',0)
cv2.imshow("screenshot image", sscv)
cv2.waitKey(0)

The showed Error is

    /home/mallory/workspace/python-autoaction/test/test_xutils.py:11: Warning: cannot register existing type 'GdkDisplayManager'
      cv2.imshow("screenshot image", sscv)
    /home/mallory/workspace/python-autoaction/test/test_xutils.py:11: Warning: g_once_init_leave: assertion 'result != 0' failed
      cv2.imshow("screenshot image", sscv)
    /home/mallory/workspace/python-autoaction/test/test_xutils.py:11: Warning: g_object_new: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
      cv2.imshow("screenshot image", sscv)
    /home/mallory/workspace/python-autoaction/test/test_xutils.py:11: Warning: invalid (NULL) pointer instance
      cv2.imshow("screenshot image", sscv)
    /home/mallory/workspace/python-autoaction/test/test_xutils.py:11: Warning: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
      cv2.imshow("screenshot image", sscv)
    /home/mallory/workspace/python-autoaction/test/test_xutils.py:11: Warning: cannot register existing type 'GdkDisplay'
      cv2.imshow("screenshot image", sscv)
    /home/mallory/workspace/python-autoaction/test/test_xutils.py:11: Warning: g_type_register_static: assertion 'parent_type > 0' failed
      cv2.imshow("screenshot image", sscv)
    Segmentation fault (core dumped)

using

  • Ubuntu 14.0.4
  • Python 2.7.6
  • cv2 2.4.8

What was wrong with that?

Bhargav Rao's user avatar

Bhargav Rao

50.3k28 gold badges121 silver badges140 bronze badges

asked Dec 25, 2014 at 13:37

fx-kirin's user avatar

3

Try installing these dependency again and let me know if problem persists

sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg cmake qt5-default checkinstall

After that just do

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
make -j2
sudo checkinstall
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig

answered Sep 6, 2015 at 5:30

iec2011007's user avatar

iec2011007iec2011007

1,8263 gold badges24 silver badges38 bronze badges

I started to learn OpenCV today and faced with a small problem:

cv2.error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function ‘imshow’*

You can use this issue just to warm up before going to solve more complicated questions:)

Thank you!

The code:

import cv2 as cv 

img = R'Photos and videos\Photos and videos\Dogs photo.jpg'

cv.imread = img

cv.imshow("Dog", img)

cv.waitKey(0)

The Error

Traceback (most recent call last):
  File "C:\Program Files\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\Admin\PycharmProjects\pythonProject1\read.py", line 7, in <module>
    cv.imshow("Dog", img)
cv2.error: OpenCV(4.6.0) :-1: error: (-5:Bad argument) in function 'imshow'
> Overload resolution failed:
>  - mat is not a numpy array, neither a scalar
>  - Expected Ptr<cv::cuda::GpuMat> for argument 'mat'
>  - Expected Ptr<cv::UMat> for argument 'mat'

>Solution :

cv.imread() is a function which takes in a «path» as an argument, so you need to pass the path to your image to it and it will then return the CV2 Image object, which you can pass that imshow() to display.

import cv2 as cv 

path = R'Photos and videos\Photos and videos\Dogs photo.jpg'

img = cv.imread(path)

cv.imshow("Dog", img)

cv.waitKey(0)

13 ответов

imshow() работает только с waitKey():

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

(Весь цикл сообщений, необходимый для обновления окна, скрыт там.)

berak

Поделиться

Я нашел ответ, который работал у меня здесь:
http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

Если вы запустите интерактивный сеанс ipython и хотите использовать highgui windows, do cv2.startWindowThread() сначала.

Подробнее: HighGUI — это упрощенный интерфейс для отображения изображений и видео из кода OpenCV. Это должно быть так просто:

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

Akhorus

Поделиться

Вы должны использовать cv2.waitKey(0) после cv2.imshow("window",img). Только тогда это сработает.

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

AdityaIntwala

Поделиться

Я столкнулся с той же проблемой. Я попытался прочитать изображение из IDLE и попытался отобразить его с помощью cv2.imshow(), но окно просмотра зависает и показывает, что pythonw.exe не отвечает при попытке закрыть окно.

Сообщение ниже дает возможное объяснение того, почему это происходит

pythonw.exe не отвечает

«В принципе, не делайте этого из IDLE. Напишите script и запустите его из оболочки или script напрямую, если в Windows, назвав его расширением .pyw и дважды щелкнув по нему. по-видимому, конфликт между собственным циклом событий IDLE и инструментами из графических интерфейсов GUI.

Когда я использовал imshow() в script и выполнял его, а не запускал его непосредственно через IDLE, он работал.

rkdasari

Поделиться

Если вы работаете внутри консоли Python, выполните следующие действия:

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

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

Затем, если вы нажмете Enter на изображении, он успешно закроет изображение, и вы можете продолжить выполнение других команд.

Dharma

Поделиться

добавьте cv2.waitKey(0) в конце.

Pygirl

Поделиться

У вас есть все необходимые фрагменты в этом потоке:

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

отлично работает для меня в IDLE.

iamchriskelley

Поделиться

У меня была аналогичная проблема и она была решена с помощью удаления

import gtk, pygtk  # remove these

Я использую Linux, поэтому может быть и то, что gtk не будет работать.
Я собирался использовать его, чтобы получить размер экрана, чтобы поместить два показанных изображения рядом друг с другом, но я предполагаю, что мне нужно сделать другой способ сделать это. Hardcoded это 1920×1080 на данный момент..

J-ho

Поделиться

Если вы решите использовать «cv2.waitKey(0)», убедитесь, что вы написали «cv2.waitKey(0)» вместо «cv2.waitkey(0)», потому что этот строчный «k» может зависнуть ваша программа тоже.

Guilherme Girão

Поделиться

Если вы не сделали это, лучше поместите

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

в один файл и запустите его.

Joseph

Поделиться

У меня работает waitKey() с номером больше 0

    cv2.waitKey(1)

RamG

Поделиться

Я использовал openCV с pyplot и смог получить изображение для рендеринга в текущем окне jupyter с помощью pyplots imshow и шоу.

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg

    # First, we need to read in an image
    image = mpimg.imread('my_image.jpg')
    plt.imshow(image)

    # then using openCV algorithms on the image, e.g. grey scale
    import cv2 
    gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) #grayscale conversion

    # finally output the result through pyplot in the current window
    plt.imshow(gray, cmap='gray')
    plt.show()

Dominic Carlyle

Поделиться

ошибка: (-215) size.width> 0 && size.height> 0 в функции imshow

Эта ошибка вызвана тем, что изображение не найдено. Так что это не ошибка функции imshow.

Alvaro Fernandez

Поделиться

Ещё вопросы

  • 1Как получить текущий элемент в Dropdownlist для ASP.NET
  • 1Отправка сообщений по ненадежной сети в JAVA
  • 0глобальная переменная с session_start ();
  • 0как сообщить, что область видимости обновлена в angularjs?
  • 0Перетаскивание JQuery не показывает перетаскиваемый элемент после добавления в список
  • 1Использование Kotlin Singleton из Java
  • 1Подсчитать количество экземпляров строки в очень большом массиве и добавить значение к значению хеша
  • 1ActivationPolicy = «Заменить» не работает в Windows Phone 8.1
  • 0Internet Explorer Print Issue
  • 0столкнулся с проблемой с угловым фильтром
  • 1Ткинтер лучшие фоны
  • 1Java RandomAccessFile.java под Linux не работает правильно
  • 0Как выделить / раскрасить таблицу, используя значения столбцов и строк?
  • 1Установка нового сервера Glassfish на Eclipse Indigo
  • 1Удалить в Java?
  • 0AngularJS / Javascript — Как я могу заменить весь объект на JSON
  • 0Использование устаревших функций кода в AngularJs
  • 1Подсчет количества вызовов функций для различных значений входных аргументов
  • 1Адаптирование spymemcached Java-клиента GetFuture к Guava ListenableFuture
  • 0кодирование значения объекта в функции ng-click
  • 1Выходной файл не содержит все строки, которые я скопировал из источника
  • 1Частичное переопределение метода: как?
  • 0Удаление заднего элемента в связанном списке
  • 0Создание приложения для создания заметок с использованием JQuery для мобильных телефонов и телефонов
  • 0MySQL провайдер данных .NET Core 2.0
  • 0Пункты меню с разной шириной
  • 1доступ к базе данных не обновляется в DataGridView после удаления строки
  • 0Я не могу сгенерировать автоинкрементный Id, а hibernate всегда генерирует 1 как Id
  • 0Как ждать дочерней директивы рендера?
  • 0Вызов Jquery из сервлета
  • 1Функция клиента чата Twilio Android getSubscribeedChannels () возвращает неполные каналы
  • 0Uncaught TypeError: Невозможно прочитать свойство ‘innerHTML’ для пустых функций. Js: 29 changeNameToLetters functions.js: 29 onclick
  • 0windows.location.replace всегда перенаправлять, добавить IF
  • 0JQuery ролловер, показать и скрыть
  • 1ArrayList в Arraylist удалить метод поведения
  • 1Ошибка чтения метаданных атрибута CollectionKind
  • 0манипулирование таблицей html с использованием foreach в codeigniter
  • 0Как закрыть всплывающее окно при нажатии в любом месте на сайте
  • 0Использовать селекторы jQuery рекурсивно?
  • 1Есть ли Java-эквивалент службы Windows
  • 1Создание приложения Tkitner с несколькими окнами
  • 1figsize не влияет на рисунки в ноутбуке Jupyter
  • 0ngSwitch не обновляется при изменении модели данных
  • 0Ожидаемый возврат алгоритма поиска STL
  • 1Как использовать пользовательский исполнитель с помощью асинхронной аннотации
  • 1Firebaserecycleadapter, в чем разница с «обычным» recycleradapter? (Андроид)
  • 0добавить числовой индекс в таблицу MySQL
  • 1JavaScript, ошибка JavaScript
  • 0координаты мыши только с круглыми числами — функция jquery
  • 6Невозможно разместить запрошенные классы в одном файле dex, даже для более ранних коммитов, которые скомпилировались ранее

Понравилась статья? Поделить с друзьями:
  • Ims service ошибка
  • Ims service остановлено как исправить ошибку
  • Impressa e80 ошибка 8
  • Importxml ошибка нет данных для импорта
  • Importrange ошибка результат слишком большой