目录
- 1.读取图像
- 1-1.imread()方法
- 2.显示图像
- 2-1.imshow()方法
- 2-2.waitKey()方法
- 2-3.destroyAllWindows()方法
- 2-4.小总结
- 3.保存图像
- 3-1.imwrite()方法
- 4.查看图像属性
- 4-1.常见的三个图像属性
1.读取图像
要对一幅图像进行处理,第一件事就是要读取这幅图像。
1-1.imread()方法
-
语法格式:
img = cv2.imread(filename, flags)
-
参数说明:
-
filename:要读取的图像的文件路径(含文件名),相对/绝对路径均可;字符串类型。
-
flags:以什么颜色类型读取图像。默认值为1可以省略,以彩色读取;为0,以灰度读取。
-
img:读取了图像的所有像素值;数组类型。
注:
1.灰度图像以彩色读取,仍然是灰度图像。
2.灰度图像的像素值为0(纯黑)~255(纯白),一共有256个灰度级。
-
-
实例:
img.png 为彩色图像;G_img.png为灰度图像。
2.显示图像
2-1.imshow()方法
-
语法格式:
cv2.imshow(winname, mat)
-
参数说明:
-
winname:显示图像的窗口名;字符串类型。
-
mat:要显示的图像;ndarray类型。
注:numpy中,矩阵的维度只能是≤2(只有二维及二维以内的数组与矩阵可相互转换),且是数组的一部分。
-
-
实例:
2-2.waitKey()方法
-
语法格式:
retval = cv2.waitKey(delay)
-
参数说明:
-
delay:等待用户按下键盘的时间,单位毫秒;超过时间自动执行(相当于自动按键了)。值为负数、0或者空时,表示无限等待。
-
retval:有按键按下时,接收该按键ASCII码;没有按键按下时(delay≠0条件下),接收-1。
注:
1.numpy中,矩阵的维度只能是≤2(只有二维及二维以内的数组与矩阵可相互转换),且是数组的一部分。
2.有人可能会想,delay=0时,没有按键按下,retval接收到也是-1吗?其实不是,当没有按键按下时,retval是接收不到值的,程序相当于阻塞了,只有按下按键阻塞没了,retval才能接收到值(即键盘ASCII值)。键盘按下看作人为清除阻塞,则返回键盘ASCII;delay时间到了看作程序自己清除阻塞,则返回-1。
-
-
实例:
我按的是空格键,所以ascii是32。
-
2-3.destroyAllWindows()方法
-
介绍:销毁所有正在显示图像的窗口。
-
语法格式:
cv2.destroyAllWindows()
-
参数说明:无
注:
cv2.destroyWindows(winname)
:可用来销毁指定窗口。 -
实例:
按下按键一次后:
再按下一次:所有窗口被销毁,程序结束。
-
2-4.小总结
-
imshow方法,提供了一个用来显示图片的窗口并将窗口与指定的图片关联;waitKey方法才是真正显示图片并控制程序是否阻塞在图片显示的时刻;destroyAllWindows方法可以销毁窗口。
-
显示图片需要窗口+图片,imshow提供了一个窗口和指定的图片,再用waitKey显示图片并阻塞程序在图片显示的时刻;通过按键或倒计时告诉waitKey看完了,waitKey就关闭阻塞,图片自然就消失了但还有个窗口,所以再用destroyAllWindows方法销毁窗口。
-
综上,imshow方法常常后面跟着waitKey和destroyAllWindows方法(多个imshow时,在最后一个imshow后面跟着即可,因为真正显示图片的是waitKey方法)!
-
imshow只会和执行到imshow时的img绑定,后面就算img像素值变了也没关系。如下图所示。
-
上面这几点仅代表我个人看法!!!
3.保存图像
3-1.imwrite()方法
-
语法格式:
cv2.imwrite(filename, img)
-
参数说明:
- filename:图像保存的文件路径(含文件名),相对/绝对路径均可;字符串类型。
- img:数组类型,与上面imread方法中参数img一致。
-
实例:
当前.py文件下会生成一个new_img.png文件。
4.查看图像属性
4-1.常见的三个图像属性
-
shape:彩色图像为(垂直像素H, 水平像素W, 通道数C);灰度图像为(垂直像素H, 水平像素W)。灰度图像通道数C为1。
-
size:图像包含的像素个数=H*W*C。
-
dtype:图像的数据类型,应该就是像素值的数据类型。
-
实例: