当前位置:首页 » 编程语言 » pythonimshow

pythonimshow

发布时间: 2022-04-29 12:46:57

‘壹’ python opencv中imshow输出图像太大,如何调整输出尺寸

通过resize重置图片尺寸
参数:图片,输出图片尺寸(一般我不用这个,我传None),宽的比例,高的比例
例子:将图片img,缩小一半显示,那么宽高为原尺寸的0.5倍
img = cv2.resize(img,None,fx=0.5,fy=0.5)

设置完尺寸后再显示
cv2.imshow('img',img)
cv2.waitKey(0)
.......
希望我的回答对你有帮助!

‘贰’ python plt.imshow 怎么用

用法以既步骤:

1、给出一张图片。

‘叁’ python处理图片数据

目录

1.机器是如何存储图像的?

2.在Python中读取图像数据

3.从图像数据中提取特征的方法#1:灰度像素值特征

4.从图像数据中提取特征的方法#2:通道的平均像素值

5.从图像数据中提取特征的方法#3:提取边缘
是一张数字8的图像,仔细观察就会发现,图像是由小方格组成的。这些小方格被称为像素。

但是要注意,人们是以视觉的形式观察图像的,可以轻松区分边缘和颜色,从而识别图片中的内容。然而机器很难做到这一点,它们以数字的形式存储图像。请看下图:

机器以数字矩阵的形式储存图像,矩阵大小取决于任意给定图像的像素数。

假设图像的尺寸为180 x 200或n x m,这些尺寸基本上是图像中的像素数(高x宽)。

这些数字或像素值表示像素的强度或亮度,较小的数字(接近0)表示黑色,较大的数字(接近255)表示白色。通过分析下面的图像,读者就会弄懂到目前为止所学到的知识。

下图的尺寸为22 x 16,读者可以通过计算像素数来验证:

图片源于机器学习应用课程

刚才讨论的例子是黑白图像,如果是生活中更为普遍的彩色呢?你是否认为彩色图像也以2D矩阵的形式存储?

彩色图像通常由多种颜色组成,几乎所有颜色都可以从三原色(红色,绿色和蓝色)生成。

因此,如果是彩色图像,则要用到三个矩阵(或通道)——红、绿、蓝。每个矩阵值介于0到255之间,表示该像素的颜色强度。观察下图来理解这个概念:

图片源于机器学习应用课程

左边有一幅彩色图像(人类可以看到),而在右边,红绿蓝三个颜色通道对应三个矩阵,叠加三个通道以形成彩色图像。

请注意,由于原始矩阵非常大且可视化难度较高,因此这些不是给定图像的原始像素值。此外,还可以用各种其他的格式来存储图像,RGB是最受欢迎的,所以笔者放到这里。读者可以在此处阅读更多关于其他流行格式的信息。

用Python读取图像数据

下面开始将理论知识付诸实践。启动Python并加载图像以观察矩阵:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from skimage.io import imread, imshow
image = imread('image_8_original.png', as_gray=True)
imshow(image)

#checking image shape
image.shape, image

(28,28)

矩阵有784个值,而且这只是整个矩阵的一小部分。用一个LIVE编码窗口,不用离开本文就可以运行上述所有代码并查看结果。

下面来深入探讨本文背后的核心思想,并探索使用像素值作为特征的各种方法。

方法#1:灰度像素值特征

从图像创建特征最简单的方法就是将原始的像素用作单独的特征。

考虑相同的示例,就是上面那张图(数字‘8’),图像尺寸为28×28。

能猜出这张图片的特征数量吗?答案是与像素数相同!也就是有784个。

那么问题来了,如何安排这784个像素作为特征呢?这样,可以简单地依次追加每个像素值从而生成特征向量。如下图所示:

下面来用Python绘制图像,并为该图像创建这些特征:

image = imread('puppy.jpeg', as_gray=True)

image.shape, imshow(image)

(650,450)

该图像尺寸为650×450,因此特征数量应为297,000。可以使用NumPy中的reshape函数生成,在其中指定图像尺寸:

#pixel features

features = np.reshape(image, (660*450))

features.shape, features

(297000,)
array([0.96470588, 0.96470588, 0.96470588, ..., 0.96862745, 0.96470588,
0.96470588])

这里就得到了特征——长度为297,000的一维数组。很简单吧?在实时编码窗口中尝试使用此方法提取特征。

但结果只有一个通道或灰度图像,对于彩色图像是否也可以这样呢?来看看吧!

方法#2:通道的平均像素值

在读取上一节中的图像时,设置了参数‘as_gray = True’,因此在图像中只有一个通道,可以轻松附加像素值。下面删除参数并再次加载图像:

image = imread('puppy.jpeg')
image.shape

(660, 450, 3)

这次,图像尺寸为(660,450,3),其中3为通道数量。可以像之前一样继续创建特征,此时特征数量将是660*450*3 = 891,000。

或者,可以使用另一种方法:

生成一个新矩阵,这个矩阵具有来自三个通道的像素平均值,而不是分别使用三个通道中的像素值。

下图可以让读者更清楚地了解这一思路:

这样一来,特征数量保持不变,并且还能考虑来自图像全部三个通道的像素值。

image = imread('puppy.jpeg')
feature_matrix = np.zeros((660,450))
feature_matrix.shape

(660, 450)

现有一个尺寸为(660×450×3)的三维矩阵,其中660为高度,450为宽度,3是通道数。为获取平均像素值,要使用for循环:

for i in range(0,iimage.shape[0]):
for j in range(0,image.shape[1]):
feature_matrix[i][j] = ((int(image[i,j,0]) + int(image[i,j,1]) + int(image[i,j,2]))/3)

新矩阵具有相同的高度和宽度,但只有一个通道。现在,可以按照与上一节相同的步骤进行操作。依次附加像素值以获得一维数组:

features = np.reshape(feature_matrix, (660*450))
features.shape

(297000,)

方法#3:提取边缘特征

请思考,在下图中,如何识别其中存在的对象:

识别出图中的对象很容易——狗、汽车、还有猫,那么在区分的时候要考虑哪些特征呢?形状是一个重要因素,其次是颜色,或者大小。如果机器也能像这样识别形状会怎么样?

类似的想法是提取边缘作为特征并将其作为模型的输入。稍微考虑一下,要如何识别图像中的边缘呢?边缘一般都是颜色急剧变化的地方,请看下图:

笔者在这里突出了两个边缘。这两处边缘之所以可以被识别是因为在图中,可以分别看到颜色从白色变为棕色,或者由棕色变为黑色。如你所知,图像以数字的形式表示,因此就要寻找哪些像素值发生了剧烈变化。

假设图像矩阵如下:

图片源于机器学习应用课程

该像素两侧的像素值差异很大,于是可以得出结论,该像素处存在显着的转变,因此其为边缘。现在问题又来了,是否一定要手动执行此步骤?

当然不!有各种可用于突出显示图像边缘的内核,刚才讨论的方法也可以使用Prewitt内核(在x方向上)来实现。以下是Prewitt内核:

获取所选像素周围的值,并将其与所选内核(Prewitt内核)相乘,然后可以添加结果值以获得最终值。由于±1已经分别存在于两列之中,因此添加这些值就相当于获取差异。

还有其他各种内核,下面是四种最常用的内核:

图片源于机器学习应用课程

现在回到笔记本,为同一图像生成边缘特征:

#importing the required libraries
import numpy as np
from skimage.io import imread, imshow
from skimage.filters import prewitt_h,prewitt_v
import matplotlib.pyplot as plt
%matplotlib inline

#reading the image
image = imread('puppy.jpeg',as_gray=True)

#calculating horizontal edges using prewitt kernel
edges_prewitt_horizontal = prewitt_h(image)
#calculating vertical edges using prewitt kernel
edges_prewitt_vertical = prewitt_v(image)

imshow(edges_prewitt_vertical, cmap='gray')

‘肆’ c#的窗口如何显示python imshow函数的结果

1、把python里的imshow函数的结果,发消息到电脑系统消息里面去,注:消息ID 唯一
2、C#窗口重写接收系统消息函数,收到消息后,判断 消息ID 是为一样,一样的话把内容取出来显示即可

‘伍’ 怎么用python显示一张图片

用python显示一张图片方法如下:

import matplotlib.pyplot as plt # plt 用于显示图片

import matplotlib.image as mpimg # mpimg 用于读取图片

import numpy as nplena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理

lena.shape #(512, 512, 3)plt.imshow(lena) # 显示图片plt.axis('off') # 不显示坐标轴

plt.show()

‘陆’ 怎么用python显示一张图片

用python显示一张图片方法如下:

import matplotlib.pyplot as plt # plt 用于显示图片

import matplotlib.image as mpimg # mpimg 用于读取图片

import numpy as nplena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png# 此时 lena 就已经是一个 np.array 了,可以对它进行任意处理

lena.shape #(512, 512, 3)plt.imshow(lena) # 显示图片plt.axis('off') # 不显示坐标轴

plt.show()

‘柒’ Python的各种imread函数在实现方式和读取速度上有何区别

1. PIL.Image.open

代码在这里:Pillow/Image.py at 3.1.x · python-pillow/Pillow · GitHub
open() 函数打开图像,但并不读入,直到有操作发生。
具体的读取操作是在 ImageFile.py 写的。大体流程是先检测文件类型,整块地读入文件内容,然后调用解码器解码,做了很多优化,效率应该还是很高的。

2. scipy.ndimage.imread

代码在这里:scipy/io.py at v0.17.1 · scipy/scipy · GitHub
imread 调用 scipy.misc.pilutil.imread。从名字就能看出来其实调用的还是 Pillow。
根据 pilutil 代码:scipy/pilutil.py at v0.17.1 · scipy/scipy · GitHub
确实是调用 pil.image.open(),然后返回一个 fromimage()。

3. scipy.misc.imread

misc 的 __init__.py 在这里:scipy/__init__.py at v0.17.1 · scipy/scipy · GitHub
调用的还是 pilutil 中的 imread
相关代码如下
try:
from .pilutil import *
from . import pilutil
__all__ += pilutil.__all__
del pilutil
except ImportError:
pass

也算是学了一招,从 pilutil 导入其所有函数添加到当前空间,然后又删除了 pilutil 消除影响。

4. skimage.io.imread

代码在这里:scikit-image/_io.py at master · scikit-image/scikit-image · GitHub
是通过插件 plugin 来读入不同的文件,而且会试用几个不同的 plugins 来找到合适的。
使用 call_plugin 来调用,代码在这里:scikit-image/manage_plugins.py at master · scikit-image/scikit-image · GitHub
可以根据如下代码查看插件调用的优先级
# For each plugin type, default to the first available plugin as defined by
# the following preferences.
preferred_plugins = {
# Default plugins for all types (overridden by specific types below).
'all': ['pil', 'matplotlib', 'qt', 'freeimage'],
'imshow': ['matplotlib'],
'imshow_collection': ['matplotlib']
}

plugins 的源代码在这里:scikit-image/skimage/io/_plugins at master · scikit-image/scikit-image · GitHub。可以看到 pil 的 imread,是用 open 打开图像之后,再转换成 ndarray。

5. cv2.imread

这里是调用的 CV::imread(),代码在这里:opencv/loadsave.cpp at master · opencv/opencv · GitHub。一般来说 C\C++ 的实现,应该比 python 速度快一点。

6. matplotlib.image.imread

matplotlib 的文档里面说,matplotlib 原生只可以读取 PNG 文件,有 PIL 的时候,可以读取其他类型的文件。如果使用 URL 打开在线图像文件,需要符合 PIL 的文档要求。

matplotlib.image.imread 的代码在这里:matplotlib/image.py at master · matplotlib/matplotlib · GitHub。matplotlib 的原生 PNG 读取和写入,是用 C 实现的,代码在这里:matplotlib/_png.cpp at master · matplotlib/matplotlib · GitHub。

matplotlib 是先用 pil 的 open 打开图像,如果格式是 png,就用原生方法打开。相关代码如下:
handlers = {'png': _png.read_png, }
if format is None:
if cbook.is_string_like(fname):
parsed = urlparse(fname)
# If the string is a URL, assume png
if len(parsed.scheme) > 1:
ext = 'png'
else:
basename, ext = os.path.splitext(fname)
ext = ext.lower()[1:]
elif hasattr(fname, 'name'):
basename, ext = os.path.splitext(fname.name)
ext = ext.lower()[1:]
else:
ext = 'png'
else:
ext = format

if ext not in handlers:
im = pilread(fname)
if im is None:
raise ValueError('Only know how to handle extensions: %s; '
'with Pillow installed matplotlib can handle '
'more images' % list(six.iterkeys(handlers)))
return im

声明的处理器只有 png。如果是 png 文件,调用 _png.read_png。如果不是 png 直接使用 pilread(就是用 pil 的 Image.open 然后 pil_to_array)。

matplotlib 的源码确实比较复杂,一大部分主体是用 C 写的,改动很激进,功能更新猛烈。

‘捌’ Python 3.6 + opencv 3.4 中imshow 函数报错

看报错信息,应该是你的img图像数据加载错误导致img数据的width和height等于0,导致窗口显示失败。在使用imread函数加载图像文件之后一定要通过img.empty()判断一下文件加载是否正确,否则后面所有基于img做的操作都会报错。

‘玖’ 在python Image中可以用show()来显示图片,但是显示以后,下面的代码就不运行了,如何运行下面的代码

Image.show()函数是这个样子的,必须先关了图片程序才往下走。

不使用show,如imshow(BW)在 Matlab 7.0 中,二进制图像是一个逻辑类,仅包括 0 和 1 两个数值。像素 0 显示为黑色,像素 1 显示为白色。显示时,也可通过NOT(~)命令,对二进制图象进行取反,使数值 0 显示为白色;1 显示为黑色。

例如: imshow(~BW)

展资料:

不使用show函数来满足运行的需求:

import threading

import Image

class ThreadClass(threading.Thread):

def run(self):

im=Image.open('z.jpg')

im.show()

print (1)

t = ThreadClass()

t.start()

print (2)

a=input('End')

#===============================

图像的表示原理:

最基本的物理图像是根据矩形网格抽样原理从连续图像域中抽取二维灰度阵列(矩阵)得到的。也可以用长向量表示二维灰度矩阵,它是按列(或行)扫描灰度矩阵,把下一列(或行)的头和前一列(或行)的尾相接而成。

它们的线性可逆变换同样可以用来表示图像。图像的每一行由行程(具有同一灰度的邻近像元集合)序列所组成,因此也可以用行程长度编码(见图像编码)表示图像。

‘拾’ Python在调用cv2.imshow()时出现的问题

先到文末下载opencv的安装包。其实这个安装包就是一个解压缩
我们在安装包解压的目录找到这个文件
把这个文件拷贝到python的包安装目录下面
在python的shell导入cv2模块试试,看是不是安装好了。结果提示还需要安装一个依赖包
好吧,还好之前有这个numpy的安装包,直接安装

热点内容
2d游戏按键精灵脚本教程 发布:2025-05-15 14:10:15 浏览:277
服务器上的邮件如何销毁 发布:2025-05-15 14:02:49 浏览:137
饥荒安卓版如何解除手柄模式 发布:2025-05-15 14:02:05 浏览:112
算法强化班 发布:2025-05-15 14:02:04 浏览:345
c语言编译后图片 发布:2025-05-15 13:51:57 浏览:792
没有被调用的函数会参与编译吗 发布:2025-05-15 13:42:51 浏览:260
在计算机中ftp的中文 发布:2025-05-15 13:41:07 浏览:1000
国网校招要网签密码和账号干什么 发布:2025-05-15 13:40:25 浏览:179
java分 发布:2025-05-15 13:34:36 浏览:846
如何下载卡巴斯基安卓版 发布:2025-05-15 13:34:36 浏览:480