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
50.3k28 gold badges121 silver badges140 bronze badges
asked Dec 25, 2014 at 13:37
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
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, даже для более ранних коммитов, которые скомпилировались ранее