Opencv-Python学习笔记一之 imread, imshow, imwrite

opencv computer vision with python

在闲暇时间里找到这本关于opencv的书,边看边学,在这也是记录下在这学习过程中的一些笔记,方便以后真正用到时查阅。

教程可查阅:opencv-python tutorial

opencv-python tutorial.png

windows环境下安装opencv

1、windows系统是win7+64位, python版本号是3.5,因此需要找到与其相对应的opencv安装版本

可以在这里找到各种版本下的安装文件: opencv_python-3.1.0-cp35-cp35m-win_amd64.whl

2、下载好opencv的安装文件后,通过pip install opencv_python-3.1.0-cp35-cp35m-win_amd64.whl进行安装

install opencv

3、等第二步安装完成后,查看是否安装成功

opencv-version

通过查看版本号可知opencv-python已安装成功。

opencv 简单入门

1、读取图片 imread(path)

Use the function cv2.imread() to read an image. The image should be in the working directory or a full path of image should be given.
Second argument is a flag which specifies the way image should be read.
cv2.IMREAD_COLOR : Loads a color image. Any transparency of image will be neglected. It is the default flag.
cv2.IMREAD_GRAYSCALE : Loads image in grayscale mode
cv2.IMREAD_UNCHANGED : Loads image as such including alpha channel
Instead of these three flags, you can simply pass integers 1, 0 or -1 respectively.

OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。

通过上面的英文我们知道opencv提供了一个imread方法让我们去读取图片,该方法有两个参数:第一个参数是我们所要读取图片的路径, 第二个参数是图片读取的方式,如IMREAD_COLOR 表示加载彩色图片(默认),IMREAD_GRAYSCALE以黑白方式加载图片,IMREAD_UNCHANGED原图加载含alpha channel信息。其中第二个参数的这三个值也可用1,0,-1来表示,方便我们在编程时的输入。

阿尔法通道(Alpha Channel)是指一张图片的透明和半透明度.

import cv2

#采取默认方式读取图片,即cv2.imread(path, 1)
img = cv2.imreda('img800.jpg')

#黑白方式读取图片
img1 = cv2.imread('img800', 0)

imread-imshow
2、图片显示 imshow()

opencv提供了cv2.imshow()来显示图片,该方法有两个参数,第一个为窗口名,第二个为所要显示的图片。

Use the function cv2.imshow() to display an image in a window. The window automatically fits to the image size.
First argument is a window name which is a string. second argument is our image. You can create as many windows as you wish, but with different window names.

直接上代码:
第一种方法:

import cv2

img1 = cv2.imread('img800.jpg', 0)
#取名图片窗口名为gray,显示图片是img1
cv2.imshow('gray', img1)
#添cv2.waitKey(0),在IDLE中执行窗口直接无响应。在命令行中执行的话,则是一闪而过
cv2.waitKey(0)
#释放窗口,简单暴力释放掉所有的窗口
cv2.destroyAllWindows()

其中cv2.waitKey()cv2.destroyAllWindows()方法在上面程序中有解释,官方解释如下:

cv2.waitKey() is a keyboard binding function. Its argument is the time in milliseconds. The function waits for specified milliseconds for any keyboard event. If you press any key in that time, the program continues. If 0 is passed, it waits indefinitely for a key stroke. It can also be set to detect specific key strokes like, if key a is pressed etc which we will discuss below.
cv2.destroyAllWindows() simply destroys all the windows we created. If you want to destroy any specific window, use the function cv2.destroyWindow() where you pass the exact window name as the argument.

第二种方法:
先通过cv2.namedWindow()对图片窗口先进行命名并进行其他设置,如可改变窗口大小。
代码如下:

import cv2 

img2 = cv2.imread('img800.jpg')
#通过设置第二个参数使得图片窗口可调节大小,默认是不可调的(cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.imshow('color',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

There is a special case where you can already create a window and load image to it later. In that case, you can specify whether window is resizable or not. It is done with the functioncv2.namedWindow(). By default, the flag is cv2.WINDOW_AUTOSIZE. But if you specify flag to be cv2.WINDOW_NORMAL, you can resize window. It will be helpful when image is too large in dimension and adding track bar to windows.

cv2.WINDOW_AUTOSIZE:根据原图大小进行展示
cv2.WINDOW_NORMAL:图片窗口可调节大小

namedWindow()
3、保存图片 cv2.imwrite()

opencv提供了cv2.imwrite()方法保存图片

Use the function cv2.imwrite() to save an image.
First argument is the file name, second argument is the image you want to save.

#保存图片到当前工作目录
cv2.imwrite('saveimg.png', img1)

imwrite()的第三个参数设置


##对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 
##注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。
cv2.imwrite('saveimg11.jpg', img1, [int(cv2.IMWRITE_JPEG_QUALITY), 5])

##对于png图片,第三个参数表示的是压缩级别。
##cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3
cv2.imwrite('saveimg11.png', img1, [int(cv2.IMWRITE_JPEG_QUALITY), 5])
save image

例子1:根据用户在键盘所敲下的不同按键对图片进行处理,如ESC退出,按下‘s’时保存图片并退出。

import numpy as np
import cv2

img = cv2.imread('img800.jpg',0)
cv2.imshow('image',img)
#本台机器系统是64位 k = cv2.waitKey(0) & 0xF
#若是32位系统请用 k = cv2.waitKey(0)
k = cv2.waitKey(0) & 0xFF
if k == 27:         # 按下ESC退出
    cv2.destroyAllWindows()
elif k == ord('s'): # 按下's'保存图片并退出
    cv2.imwrite('savegray.png',img)
    cv2.destroyAllWindows()

例子2:通过opencv来读取图片,用matplotlib来显示图片,充分利用其plot的诸多特性。

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('img800.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) 
plt.show()

因为opencv与matplotlib对图片的读取值顺序等的差异,在二者互相交替使用时需要注意一些细节,更多问题讨论大家可以参考 some problem when you try to load color image in OpenCV and display it in Matplotlib

Color image loaded by OpenCV is in BGR mode. But Matplotlib displays in RGB mode. So color images will not be displayed correctly in Matplotlib if image is read with OpenCV.

show Image by matplotlib.png

【写在最后】opencv-python学习第一篇就先记录下这些,后面会根据学习情况及时更新笔记。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容