《OpenCV3 计算机视觉 Python语言实现》——处理文件、摄像头和图形用户界面
2017-10-23 21:36
696 查看
2.1.1 读/写图像文件
>>import cv2
>>image = cv2.imread('MyPic.png')
>>cv2.imwrite('MyPic.jpg', image)
imread()函数的参数:
IMREAD_ANYCOLOR=4;
IMREAD_ANYDEPTH=2;
IMREAD_COLOR=1;
IMREAD_GRAYSCALE=0;
IMREAD_LOAD_GDAL=8;
IMREAD_UNCHANGE=-1;
2.1.2 图像与原始字节之间的转换
一个字节能表示0到255的整数。一个像素通常由每个通道的一个字节表示。
一个OpenCV图像是.array类型的二维或三维数组。8位的灰度图像是一个含有字节值的二维数组。一个24位的BGR图像是一个三维数组,它也包含了字节值。可使用表达式访问这些值,如image[0,0]或image[0,0,0]。第一个值代表像素的y坐标啊或行,0表示顶部;第二个值是像素的x坐标或列,0表示最左边;第三个值(如果可用的话)表示颜色通道。如,对于一个左上角有白色像素的8位灰度图像而言,image[0,0]的值为255. 对于一个左上角有蓝色像素的24位BGR图像而言,image[0,0]是[255,0,0]。
可以用另外一个表示,如image[0,0]或image[0,0]=128,还可表示成image.item((0,0))或image.setitem((0,0),128)。对于单像素操作,第二种表示方式更有效。
若一幅图像的每个通道为8位,则可将其显示转换为标准的一维Python bytearray格式:
byteArray = bytearray(image)
反之,bytearray含有恰当顺序的字节,可以通过显示转换和重构,得到numpy.array形式的图像:
garyImage = numpy.array(garyByteArray ).reshape(height, width)
bgrImage = numpy.array(bgrByteArray ).reshape(height, width, 3)
下面介绍将含有随机字节的bytearray转换为灰度图像和BGR图像:
我用的Anaconda的python,结果如下:
使用Python标准的os.urandom()函数可随机生成原始字节,随后会把该字节转换为NumPy数组。需要注意的是,诸如numpy.random.randint(0, 256, 120000).reshape(400,
300)语句也能直接(并且更高效地)随机生成NumPy数组。使用os.urandom()函数的原因是该语句有助于展示原始字节的转换。
2.1.3 使用numpy.array访问图像数据
加载OpenCV图像最简单的方式是使用imread()函数,该函数会返回一幅图像,这幅图像是一个数组(根据imread()函数输入参数的不同,该图像可能是二维数组,也可能是三维数组)。
y.array结构针对数组操作有很好的优化,它允许某些块(bulk)操作,这些操作在通常的Python中不可用这些特定的.array操作在OpenCV的图像处理中会很方便。利用numpy.array函数来转换数组比用普通的Python数组转换要快得多。
import cv2
import numpy as np
img = cv2.imread('MyPic.png')
img[0,0] = [255, 255, 255]
cv2.imshow('my image', img)
>>import cv2
>>image = cv2.imread('MyPic.png')
>>cv2.imwrite('MyPic.jpg', image)
imread()函数的参数:
IMREAD_ANYCOLOR=4;
IMREAD_ANYDEPTH=2;
IMREAD_COLOR=1;
IMREAD_GRAYSCALE=0;
IMREAD_LOAD_GDAL=8;
IMREAD_UNCHANGE=-1;
2.1.2 图像与原始字节之间的转换
一个字节能表示0到255的整数。一个像素通常由每个通道的一个字节表示。
一个OpenCV图像是.array类型的二维或三维数组。8位的灰度图像是一个含有字节值的二维数组。一个24位的BGR图像是一个三维数组,它也包含了字节值。可使用表达式访问这些值,如image[0,0]或image[0,0,0]。第一个值代表像素的y坐标啊或行,0表示顶部;第二个值是像素的x坐标或列,0表示最左边;第三个值(如果可用的话)表示颜色通道。如,对于一个左上角有白色像素的8位灰度图像而言,image[0,0]的值为255. 对于一个左上角有蓝色像素的24位BGR图像而言,image[0,0]是[255,0,0]。
可以用另外一个表示,如image[0,0]或image[0,0]=128,还可表示成image.item((0,0))或image.setitem((0,0),128)。对于单像素操作,第二种表示方式更有效。
若一幅图像的每个通道为8位,则可将其显示转换为标准的一维Python bytearray格式:
byteArray = bytearray(image)
反之,bytearray含有恰当顺序的字节,可以通过显示转换和重构,得到numpy.array形式的图像:
garyImage = numpy.array(garyByteArray ).reshape(height, width)
bgrImage = numpy.array(bgrByteArray ).reshape(height, width, 3)
下面介绍将含有随机字节的bytearray转换为灰度图像和BGR图像:
import cv2 import numpy as np import os # 创建一个120000个随机字节的数组 randomByteArray = bytearray(os.urandom(120000)) #os.urandom(n) 返回n个随机byte值的string,作为加密使用 flatNumpyArray = np.array(randomByteArray) #将随机字节转换为NumPy数组 # 将数组转换为400 x 300的灰度图像 garyImage = flatNumpyArray.reshape(300, 400) cv2.imwrite('randomGary.png', garyImage) # 将数组转换为100 x 400 x 3 的彩色图像 bgrImage = flatNumpyArray.reshape(100, 400, 3) cv2.imwrite('randomColor.png', bgrImage)
我用的Anaconda的python,结果如下:
使用Python标准的os.urandom()函数可随机生成原始字节,随后会把该字节转换为NumPy数组。需要注意的是,诸如numpy.random.randint(0, 256, 120000).reshape(400,
300)语句也能直接(并且更高效地)随机生成NumPy数组。使用os.urandom()函数的原因是该语句有助于展示原始字节的转换。
2.1.3 使用numpy.array访问图像数据
加载OpenCV图像最简单的方式是使用imread()函数,该函数会返回一幅图像,这幅图像是一个数组(根据imread()函数输入参数的不同,该图像可能是二维数组,也可能是三维数组)。
y.array结构针对数组操作有很好的优化,它允许某些块(bulk)操作,这些操作在通常的Python中不可用这些特定的.array操作在OpenCV的图像处理中会很方便。利用numpy.array函数来转换数组比用普通的Python数组转换要快得多。
import cv2
import numpy as np
img = cv2.imread('MyPic.png')
img[0,0] = [255, 255, 255]
cv2.imshow('my image', img)
相关文章推荐
- OpenCV3计算机视觉Python语言实现(二):处理文件、摄像头和图形用户界面
- OpenCV3计算机视觉Python语言实现(三):使用OpenCV3处理图像
- 《Opencv 3 计算机视觉 python语言实现》· 第二遍 —— 读后笔记
- OpenCV 3计算机视觉:Python语言实现(原书第2版) pdf+项目源代码
- OpenCV 3计算机视觉:Python语言实现(原书第2版) pdf+项目源代码
- 《OpenCV 3计算机视觉:Python语言实现》(原书第2版)读后感
- 【图书纠错】《Opencv3计算机视觉Python语言实现》
- OpenCV3计算机视觉:Python语言实现 chaper2_cameo.py(树莓派)
- opencv3计算机视觉Python语言实现(原书第二版)第三章3.6节缺少BGRPortraCurveFilter()函数
- 《OpenCV 3计算机视觉:Python语言实现》学习笔记——目标跟踪中基本运动检测的思考
- OpenCV 3计算机视觉 Python语言实现(第2版)(含示例代码)
- OpenCV3计算机视觉Python语言实现人脸识别笔记
- Python计算机视觉:第十章 OpenCV
- 【python下使用OpenCV实现计算机视觉读书笔记4】保存摄像头视频
- 计算机视觉 | Python OpenCV 3 使用背景减除进行目标检测
- opencv2实现多张图片路线路牌检测_计算机视觉大作业2
- opencv设定摄像头读取分辨率 python实现
- 【碎片知识(1)· 计算机视觉基础】利用OpenCV实现图像的“Hello, world!”
- 【计算机视觉】 双目相机标定以及立体测距原理及OpenCV实现
- 【计算机视觉】opencv读取多个摄像头