图像处理之读入写入图像文件
2017-06-14 22:44
190 查看
OpenCV是开源、跨平台的计算机视觉库,由英特尔公司发起并开发,在商业和研究领域中可以免费使用。而Python作为当前非常流行的动态语言之一,Python不仅使用非常简单,而且功能强大。通过Python来学习OpenCV框架,可以很快的理解计算机视觉的基本概念以及重要算法。下面我们就开始OpenCV的学习之旅吧!
使用OpenCV读/写图像文件:imread() 函数和imwrite() 函数能支持各种静态图像文件格式。支持:BMP、PNG、JPEG、TIFF格式的图像。接着简单介绍一下图像的细节。无论哪种格式,每一个像素都会有一个值,但是不同格式表示像素的方式有所不同。在计算机视觉中有三种常用的色彩空间:灰度、BGR以及HSV。灰度色彩空间是通过除去彩色信息来将其转换为灰阶,灰度色彩空间对中间处理特别有效。BGR即蓝、绿、红色彩空间,每一个像素点都由一个三元数组来表示,分别代表蓝、绿、红色。例如:(255,0,0)表示蓝色,(0,255,0)表示绿色,(0,0,255)表示红色。HSV分别表示色调、饱和度、黑暗的程度。
用matplotlib展示图像
参考:
《OpenCV 3计算机视觉Python语言实现》
OpenCV帮助文档:http://docs.opencv.org/3.0.0/dc/d2e/tutorial_py_image_display.html
所使用的图像示例:
使用OpenCV读/写图像文件:imread() 函数和imwrite() 函数能支持各种静态图像文件格式。支持:BMP、PNG、JPEG、TIFF格式的图像。接着简单介绍一下图像的细节。无论哪种格式,每一个像素都会有一个值,但是不同格式表示像素的方式有所不同。在计算机视觉中有三种常用的色彩空间:灰度、BGR以及HSV。灰度色彩空间是通过除去彩色信息来将其转换为灰阶,灰度色彩空间对中间处理特别有效。BGR即蓝、绿、红色彩空间,每一个像素点都由一个三元数组来表示,分别代表蓝、绿、红色。例如:(255,0,0)表示蓝色,(0,255,0)表示绿色,(0,0,255)表示红色。HSV分别表示色调、饱和度、黑暗的程度。
#! /usr/bin/env python # -*- coding:utf-8 -*- import cv2 import numpy as np import os import matplotlib.pyplot as plt # 由于每个像素都是由一个8位整数来表示,即每个像素值的范围是0-255.所以,可以这样表示一个图像 img = np.zeros((3,3), dtype=np.uint8) #一个黑色正方形图像图像与原始字节之间的转换
randomByteArray = bytearray(os.urandom(120000)) flatNumpyArray = np.array(randomByteArray) # 转换为灰色图像 grayImage = flatNumpyArray.reshape(300, 400) cv2.imwrite("RondomGray.png", grayImage) # 转换为BGR图像 bgrImage = flatNumpyArray.reshape(100, 400, 3) cv2.imwrite("RandomColor.png", bgrImage)访问图像数据
# 将BGR图像的(0,0)处的像素转化为白像素 img = cv2.imread("timg.jpg") # [0,0]表示最左上角。 第一个数字表示y轴或行,0表示最上角。而第二个数字表示x轴或列,0表示最左边。 img[0, 0] = [255, 255, 255] cv2.imwrite("timg_1.jpg", img) # 将图像所有的G(绿色)值设为0 img[:, :, 1] = 0 # img中的最后一个数表示通道,对于一个有色图像来说,有三个通道,顺序是B,G,R分别用0,1,2表示 cv2.imwrite("timg_2.jpg", img) # 锁定一个区域并复制它到另一个区域 my_roi = img[0:100, 0:100] img[300:400, 300:400] = my_roi cv2.imwrite("timg_3.jpg", img) # 查看图像的宽度,高度和通道数,如果是单 4000 色或灰色,则没有通道数 print img.shape # 图像像素的大小 print img.size # 该属性会得到图像数据类型 print img.dtype在窗口显示图像
imga = cv2.imread("timg.jpg") cv2.imshow("My img", imga) cv2.waitKey() # 表示等待键盘触发的时间 cv2.destroyAllWindows() # 表示由opencv创建的所有窗
# 在来看一个例子,解释cv2.waitKey()的用法。 img_messi = cv2.imread("messi5.jpg", 0) # 以灰色读入图像 cv2.imshow("image", img_messi) k = cv2.waitKey(0) if k == 20: # 按下“ESC”键退出 cv2.destroyAllWindows() elif k == ord("s"): # 按下“s”键退出图像并保存 cv2.imwrite("image_messigray.png", img_messi) cv2.destroyAllWindows()
用matplotlib展示图像
plt.imshow(img_messi, cmap="gray", interpolation="bilinear") plt.xticks([]), plt.yticks([]) plt.show()
参考:
《OpenCV 3计算机视觉Python语言实现》
OpenCV帮助文档:http://docs.opencv.org/3.0.0/dc/d2e/tutorial_py_image_display.html
所使用的图像示例:
相关文章推荐
- Matlab中如何读出写入图像文件以及对图像的简单处理
- 【python图像处理】txt文件数据的读取与写入
- 【Python】数字图像处理,打开和写入图像文件
- matlab图像处理编程基础之读取和写入文件
- C++图像处理中从硬盘读入图像文件,并将相应数据赋值给图像类的char**data成员
- Matlab中如何读出写入图像文件以及对图像的简单处理
- Matlab中如何读出写入图像文件以及对图像的简单处理
- 读入图像文件并显示【C#图像处理学习笔记】
- CS0016: 未能写入输出文件“c:/WINDOWS/Microsoft.NET/***.dll”错误处理
- 日志文件满而造成SQL数据库无法写入文件处理方法
- 未能写入输出文件“c:/WINDOWS/Microsoft.NET/***.dll”错误处理
- 将图像数据写入文件的函数
- 未能写入输出文件“c:\WINDOWS\Microsoft.NET\***.dll”错误处理
- 图像处理基础——bmp文件
- 关于applet写入文件的处理 选择自 javaduke 的 Blog
- CxImage与OpenGL结合,用于读入多种格式的纹理以及用来把屏幕保存为各种格式的图像文件。
- 处理2D图像和纹理——创建一张纹理,定义每个像素的颜色,将纹理保存到一个文件
- CS0016: 未能写入输出文件“c:/WINDOWS/Microsoft.NET/***.dll”错误处理
- 关于applet写入文件的处理
- Tcl脚本:从文件读入一行并处理的框架