matplotlib.pyplot.imread读取PNG图片转int
时间: 2024-04-24 12:25:40 浏览: 35
您可以使用`matplotlib.pyplot.imread`函数读取PNG图片,并使用`astype`方法将其转换为整数类型。以下是一个示例代码:
```python
import matplotlib.pyplot as plt
# 读取PNG图片
image = plt.imread('image.png')
# 将图像转换为整数类型
image_int = (image * 255).astype(int)
# 打印转换后的图像数据类型
print(image_int.dtype)
```
在这个示例中,假设您要读取的PNG图片文件名为`image.png`。通过将图像乘以255,然后使用`astype(int)`将其转换为整数类型。最后,您可以打印转换后的图像数据类型,以确认转换是否成功。
请注意,这里假设您的PNG图像具有0到1之间的浮点像素值范围。如果您的PNG图像像素值范围不同,请相应地调整乘法因子。
相关问题
#测试的方法进行操作,得到最终的预测数字。 import numpy as np import matplotlib.pyplot as plt from PIL import Image import cv2 @tf.autograph.experimental.do_not_convert def predict(image_path): img= Image.open(image_path).convert("L") img=np.array(np.array(img)/255).reshape((1,28,28, 1)) img=tf.cast(img,dtype=tf.float64) #print(img) checkpoint.restore(manager.latest_checkpoint) logits=cnnmodel.predict(img) prob = tf.nn.softmax(logits, axis=1) pred = tf.argmax(prob, axis=1) pred = tf.cast(pred, dtype=tf.int32) print("经过识别大概率认为这个数字是",int(pred[0])) print(prob)#查看0-9每个数字的概率预 predict(r"D:\QQDownload\手写数字识别\5.png") img=cv2.imread(r"D:\QQDownload\手写数字识别\5.png") plt.imshow() plt.show(img)
在这段代码中,首先导入了必要的模块,包括 numpy、matplotlib、PIL 和 cv2 等模块。然后定义了一个 `predict` 函数,该函数接受一个图像路径作为输入,并使用 PIL 库将图像转换为灰度图像。接着将图像转换为 numpy 数组并进行归一化处理,然后将其转换为 Tensor 类型的数据。然后使用 TensorFlow 的 `tf.autograph.experimental.do_not_convert` 装饰器来避免自动转换 Python 控制流代码。接着从最新的检查点中恢复模型,并对输入图像进行预测。使用 TensorFlow 的 `tf.nn.softmax` 函数来计算每个数字的概率预测结果,并使用 `tf.argmax` 函数获取最终预测结果。最后将预测结果转换为整数类型,并输出预测结果和每个数字的概率预测结果。
在函数的最后,使用 OpenCV 的 `cv2.imread` 函数读取图像,并使用 matplotlib 的 `plt.imshow` 和 `plt.show` 函数来显示图像。但是在 `plt.imshow` 函数中,需要传入图像数组 `img` 作为参数,因此需要将 `cv2.imread` 返回的图像数组作为 `plt.imshow` 函数的参数传入。否则会出现参数错误或者无法显示图像的情况。
import os import cv2 import sys import math import random import imageio import numpy as np from scipy import misc, ndimage import matplotlib.pyplot as plt img_path = sys.argv[1] img = cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray, 50, 150, apertureSize=3) # 霍夫变换 lines = cv2.HoughLines(edges, 1, np.pi / 180, 0) rotate_angle = 0 for rho, theta in lines[0]: a = np.cos(theta) b = np.sin(theta) x0 = a * rho y0 = b * rho x1 = int(x0 + 1000 * (-b)) y1 = int(y0 + 1000 * (a)) x2 = int(x0 - 1000 * (-b)) y2 = int(y0 - 1000 * (a)) if x1 == x2 or y1 == y2: continue t = float(y2 - y1) / (x2 - x1) rotate_angle = math.degrees(math.atan(t)) if rotate_angle > 45: rotate_angle = -90 + rotate_angle elif rotate_angle < -45: rotate_angle = 90 + rotate_angle print("rotate_angle : "+str(rotate_angle)) rotate_img = ndimage.rotate(img, rotate_angle) imageio.imsave('ssss.png',rotate_img) cv2.imshow("img", rotate_img) cv2.waitKey(0)
这是一些Python代码,主要功能是读取一张图片并进行边缘检测,需要调用opencv、scipy、numpy等库。首先通过sys.argv获取图片路径,然后读取并转换成灰度图,接着使用Canny方法检测边缘并返回结果。
阅读全文