您的位置:首页 > 其它

图像处理之读入写入图像文件

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分别表示色调、饱和度、黑暗的程度。

#! /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

所使用的图像示例:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: