【计算机视觉】图片的加载、查看与保存(OpenCV)

1. 准备

进行计算机视觉的处理需要安装相应的第三方库,这里直接安装,Anaconda下的cmd运行如下指令,安装opencv-python 、tensorflow和keras三个库

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python keras
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow 

其中关于tensorflow的下载会比较漫长(关联的库太多,而且还很大),建议和其他两个分开下载,如下
在这里插入图片描述

2. 图片加载

先导入有关的库,并在jupyter notebook上进行内嵌显示

import cv2
import matplotlib.pyplot as plt
%matplotlib inline

2.1 绝对路径加载

比如测试文件夹放在D盘的个人文件夹中,名称为1.jpg,需要加载此图片然后打印出图片的宽高及通道,代码如下

image = cv2.imread('D:/个人/1.jpg')
print(f'weight: {image.shape[1]} piexls')
print(f'height: {image.shape[0]} piexls')
print(f'channels: {image.shape[2]}')

→ 输出的结果为:(图片加载中不能存在中文字符)

AttributeError                            Traceback (most recent call last)
<ipython-input-3-d7c684f417fc> in <module>
      1 image = cv2.imread('D:/个人/1.jpg')
----> 2 print(f'weight: {image.shape[1]} piexls')
      3 print(f'height: {image.shape[0]} piexls')
      4 print(f'channels: {image.shape[2]}')

AttributeError: 'NoneType' object has no attribute 'shape'

于是尝试把文件放置在D盘下面的AI文件夹下,然后重新运行此命令

image = cv2.imread('D:/AI/1.jpg')
print(f'weight: {image.shape[1]} piexls')
print(f'height: {image.shape[0]} piexls')
print(f'channels: {image.shape[2]}')

→ 输出的结果为:(这张图像就是博客的头像)

weight: 1920 piexls
height: 1080 piexls
channels: 3

2.2 相对路径加载

上面的操作存在着中文文件夹下的图片不能正常加载的情况,为了解决这个问题,可以使用相对路径进行加载,比如还是在D盘个人文件夹下的1.jpg图像。

方法一、执行代码如下

import os
os.chdir('D:/个人')
image = cv2.imread('1.jpg')
print(f'weight: {image.shape[1]} piexls')
print(f'height: {image.shape[0]} piexls')
print(f'channels: {image.shape[2]}')

→ 输出的结果为:(先通过改变程序的运行路径,然后加载相对路径下的文件)

weight: 1920 piexls
height: 1080 piexls
channels: 3

方法二、就是直接将文件放在jupyter notebook运行路径文件夹下,与创建的python3文件同一路径即可

image = cv2.imread('1.jpg')
print(f'weight: {image.shape[1]} piexls')
print(f'height: {image.shape[0]} piexls')
print(f'channels: {image.shape[2]}')

→ 输出的结果为:

weight: 1920 piexls
height: 1080 piexls
channels: 3

上面两种方法加载先相对路径,本质上是一模一样的,都是把路径指引到程序运行的路径下面,不过一个是程序操作,一个是手动操作的

3. 图像查看

读入图像之后,可以通过matplotlib库进行图像的显示,如下(注意关闭坐标轴)

plt.imshow(image)
plt.axis('off')

→ 输出的结果为:(最开始引用了图表内嵌的方式,这里就不用plt.show()了)
ZG4ubmV0L2x5c184Mjg=,size_16,color_FFFFFF,t_70)
但是会发现,色彩与原来图像的风格是不一样的,原因在于cv2,读取图像时候是以BGR的方式读入,而matplotlib是以RGB进行显示的,因此修改一下读取的方式即可

new_image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
plt.imshow(new_image)
plt.axis('off')

→ 输出的结果为:(通过cv2里面的BGR转RGB进行读取)
在这里插入图片描述

4. 图像保存

这里需要注意,保存的时候应该保存的是image变量,也就是程序刚刚读入的图像的变量,而不是纠正过颜色的new_image变量,因为cv2还是会以原格式储存

如果输出的是new_image对象,代码如下

cv2.imwrite('D:/AI/image.jpg',new_image)

→ 输出的结果为:(非正常图像)
→ 输出的结果为:
如果输出的是image对象,代码如下

cv2.imwrite('D:/AI/image.jpg',image)

→ 输出的结果为:(输出正常的图像)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lys_828/article/details/106065842