图像是由众多的像素值构成的,我们如何去操作图像呢?
答案就是将图像转化为数组。
OpenCV提供了这样的方法。
我们使用cv2.imread()方法读取图片,返回数组格式。
对于cv2.imread(filename, flags)函数参数如下:
参数filename:图片的路径和文件名。如果图片放在当前文件夹下,直接写文件名就行了,如“lena.jpg”,否则需要给出绝对路径或相对路径,如“img/lena.jpg”。
参数flags:图片的读取方式,省略则为默认值。读取方式有三种,分别为:
cv2.IMREAD_COLOR:彩色图(1),默认值;
cv2.IMREAD_GRAYSCALE:灰度图(0);
cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1)。
在实际应用中,通常对图像进行一系列操作后要显示一下处理后的结果。首先需要新建一个空白窗口用作图像显示,再调用图片显示命令在窗口中显示出图片。cv2.namedWindow(window_name, 默认参数) 的功能就是新建一个显示窗口,可以指定窗口的类型。具体的参数为:
参数window_name是窗口的名字;
默认参数为cv2.WINDOW_AUTOSIZE,表示窗口大小自适应图片,也可以设置为cv2.WINDOW_NORMAL,表示窗口大小可调整。图片比较大的时候,可以考虑用后者。在一般使用的时候,可以跳过此步,直接使用imshow()方法。
OpenCV中可以使用cv2.imshow()方法显示图片,同时窗口会自适应图片大小。imshow(window_name, image)方法也有两个参数,第一个参数window_name是窗口的名字,第二个参数image是要显示的图片内容的数组形式。该方法执行后会弹出一个窗口,窗口的名字就是上面定义的window_name。
如果想要设置窗口的显示时间,则需要使用waitKey()方法,参数为设置的毫秒数,0代表永久显示(除非手动关掉窗口)。显示完成后,还需要释放窗口占用的资源,这里使用cv2.destroyAllWindows()方法,该方法会释放所有窗口占用的资源,如果要释放指定窗口的资源,可以使用cv2.destroyWindow(window_name)方法,参数window_name为要释放的窗口的名字。
如果想把处理后的图片结果保存到本地,可以使用cv2.imwrite(filename, img [, paras])方法,参数filename是保存的路径,参数img是保存的图片内容,paras表示不同编码格式的参数,一般为nparray 多维数组形式。