加载图像是图像处理的第一步
我们假设图像存放在py程序对应的根目录下,名字为pic.jpeg
import cv2
image=cv2.imread("pic.jpeg")
cv2.imshow("orig",image)
cv2.waitKey(0)
执行脚本后,将显示以orig为名的原图像(因为我们未作任何处理)
waitKey(0)指暂停脚本的执行,直到我们按下键盘上的键。使用参数“0”表示任何按键都会取消暂停执行。如果我们不使用这个函数,图像显示的瞬间就会被关闭,从而看不见显示的图像。
在后期深度学习时,有的神经网络只接收特定尺寸的图像进行学习。因此,我们要会调整其尺寸。
print(image.shape)
我得到的结果是(382,750,3),这表示该图像有382行,750列和3通道。这里需要注意,如果用一个长方形的长和宽来比拟的话,行数代表宽度,列数代表长度,和我们平时的长宽说法习惯不同。
假设我们将图片的列数调整为250列,行数等比例调整
ratio=250/image.shape[1]
resized=cv2.resize(image,(250,int(image.shape[0]*ratio)),
interpolation = cv2.INTER_AREA)
cv2.imshow("resized", resized)
cv2.waitKey(0)
首先,我们的image.shape是一个numpy数组,索引是从0开始计数的。所以image.shape[0]指的是行数,image.shape[1]指的是列数,image.shape[2]指的是通道数。
因为我们这里想等比例缩放图像,所以求了一个比率ratio。
resize函数,第一个参数是输入的图像。第二个参数是要调整的尺寸,这里注意其输入为(列数,宽数),排列顺序和image.shape相反。我们这里还用了一个int类型变换,是因为我们的行数列数需要是整数。第三个参数interpolation是插值方法的选择,对于插值的详细说明可以查看这篇文章。除此之外还有其他一些参数,大家可以查看官方文档,但其实有这些就够了。
调整成(250,250)
有时候我们只关心图像中的某一区域,因为一些不相关的区域可能对我们图像识别的结果会有影响。
cropped = image[0:100, 500:750]
这里依旧是(行,列),向切片提供startY和endY坐标,然后是startX和endX坐标。
cv2.imwrite("test.png",cropped)
第一个参数是保存的路径(可以变更文件类型),第二个参数是要保存的图像。
“本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/kasami_/article/details/117362772。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。”