OpenCV图像数字化
灰度图像数字化##
我们平时使用PS或者其它图像处理的软件打开一个要处理的图像,当我们将图像放大的足够大的时候我们会发现很多个灰度程度不同的小方格,其中每个方格就相当于一个像素,水平方向的方格数代表这个图像的像素宽度(通常在图像的属性信息中可以查看到图像以像素为单位的宽度),同样垂直方向上的方格的个数代表图像的像素高度。计算机会将每个方格化为一个数值- “位深度”,是将一个方格化为[0,255]之间的一个uchar类型的数字,用256个数来表示灰度的深浅(0代表黑色,256代表白色),值越小越灰,反之越大越接近白色,就越亮。总之对于计算机数字图像的处理就是对图像矩阵的操作。
利用imread的Python API ,可以将灰度图像转化成都ndarry类型,实例如下:
import cv2
import numpy as np
#读入原始图像
img=cv2.imread('j1.jpg',cv2.IMREAD_GRAYSCALE)
#灰度化处理
cv2.imshow("1",img);
cv2.waitKey(0)
运行结果:

imread的参数说明:OpenCV2.x和OpenCV3.x的语法不同(我已经抛弃2.x了,所有实例均以OpenCV3.x版本为例),在OpenCV3.x版本中对应的参数是
| 参数 | OpenCV3.x的解释 |
|---|---|
| filename | 图像的文件名,可以包含路径 |
| flags | IMREAD_COLOR: 彩色图像;IMREAD_GRAYSCALE:灰色图像;IMREAD_ANYCOLOR:任意图像 |
我使用的编辑工具是Anaconda2的Spyder编辑器,正常情况下会有一定的代码提示,当忘记完整的参数时可以根据提示来补全。
对于图像的灰度化也可以使用cv2.cvtColor()函数进行颜色转换 例如图像灰度化:
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
彩色图像数字化##
对彩色图像的理解和对灰色图像的理解上相似,灰色图像的每一个像素都是有一个数组量化的,二彩色图像的每一个像素都是由三个数字组成的向量量化的,最常用的就是用R,G,B三个分量来量化的,这三个元素的值分别代表三种基色:Red、Green、Blue的亮度。假设每种基色的数值量化成m=2的n次方,如同8为灰度图像一样,将灰度量化成2的8次方=256个数。RGB图像的红绿蓝三个通道的图像都是一张8位图,因此颜色的总数是256的3次方=16777216,如(0,0,0)代表黑色,(255,255,255)代表白色,(255,0,0)代表红色,(0,0,255)代表蓝色。
下面将RGB彩色图转换为三维的ndarray
import cv2
import numpy as np
import sys
#读入原始图像
image=cv2.imread('j1.jpg',cv2.IMREAD_COLOR)
#得到三个颜色通道
b = image[:,:,0]
g = image[:,:,1]
r = image[:,:,2]
#显示三个颜色通道
cv2.imshow('b',b)
cv2.imshow('g',g)
cv2.imshow('r',r)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:



扩展##
提到cv2.cvtColor()函数我就在这里插入点“有趣的东西” 这个函数可以实现好多种变化,首先我们要知道图像处理中有多种色彩空间,例如 RGB、HLS、HSV、HSB、YCrCb、CIE XYZ、CIE Lab 等。下面对平常用到的颜色空间简单介绍下:
- RGB (Red 红色,Green 绿色,Blue 蓝色),可用于表示大部分颜色,也是图像处理中最基本、最常用、面向硬件的颜色空间,是一种光混合的体系.
- LAB (L 亮度,A 绿色到红色的分量, B 蓝色到黄色的分量)颜色空间由一个亮度通道和两个颜色通道组成的。LAB 相较于RGB与CMYK等颜色空间更符合人类视觉,也更容易调整:想要调节亮度,就调节L 通道,想要调节只色彩平衡就分别调 A 和 B。L 越大,亮度越高(L为0时是黑色),A 和 B 为0时都代表灰色,在实际应用中常常将颜色通道的范围[-100, +100]或[-128, 127]之间。
- HSI (H 色相,S 饱和度,I 亮度) HSI颜色模式中的色调使用颜色类别表示,饱和度与颜色的白光光亮亮度刚好成反比,代表灰色与色调的比例,亮度是颜色的相对明暗程度.
下面是一个综合运用的实例:
from matplotlib import pyplot as plt
import cv2
img_BGR = cv2.imread('j1.jpg') # BGR
plt.subplot(3,3,1)
plt.imshow(img_BGR);plt.axis('off');plt.title('BGR')
img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)
plt.subplot(3,3,2)
plt.imshow(img_RGB);plt.axis('off');plt.title('RGB')
img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)
plt.subplot(3,3,3);
plt.imshow(img_GRAY);plt.axis('off');plt.title('GRAY')
img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)
plt.subplot(3,3,4)
plt.imshow(img_HSV);plt.axis('off');plt.title('HSV')
img_YcrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)
plt.subplot(3,3,5)
plt.imshow(img_YcrCb);plt.axis('off');plt.title('YcrCb')
img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)
plt.subplot(3,3,6)
plt.imshow(img_HLS);plt.axis('off');plt.title('HLS')
img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)
plt.subplot(3,3,7)
plt.imshow(img_XYZ);plt.axis('off');plt.title('XYZ')
img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)
plt.subplot(3,3,8)
plt.imshow(img_LAB);plt.axis('off');plt.title('LAB')
img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)
plt.subplot(3,3,9)
plt.imshow(img_YUV);plt.axis('off');plt.title('YUV')
plt.show()
运行结果:

OpenCV图像数字化的更多相关文章
- 基于opencv下对视频的灰度变换,高斯滤波,canny边缘检测处理,同窗体显示并保存
如题:使用opencv打开摄像头或视频文件,实时显示原始视频,将视频每一帧依次做灰度转换.高斯滤波.canny边缘检测处理(原始视频和这3个中间步骤处理结果分别在一个窗口显示),最后将边缘检测结果保存 ...
- opencv第三课,图像滤波
1.介绍 OpenCV图像处理技术中比较热门的图像滤波操作主要被分为了两大类:线性邻域滤波和非线性滤波.线性邻域滤波常见的有“方框滤波“,”均值滤波“和”高斯滤波“三种,二常见的非线性滤波主要是中值滤 ...
- 图像滤波与OpenCV中的图像平滑处理
.About图像滤波 频率:可以这样理解图像频率,图像中灰度的分布构成一幅图像的纹理.图像的不同本质上是灰度分布规律的不同.但是诸如"蓝色天空"样的图像有着大面积近似的灰度强度,而 ...
- 深入学习OpenCV中图像灰度化原理,图像相似度的算法
最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...
- opencv在图像显示中文
在图像定位和模式识别时,经常需要把结果标注到图片上,标注内容可以是数字字母.矩形框等(opencv支持的)或者是中文汉字(借助freetype). 1.显示数字/矩形框 #include <op ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- opencv源码:cascadedetect
级联分类器检测类CascadeClassifier,提供了两个重要的方法: CascadeClassifier cascade_classifier; cascade_classifier.load( ...
- 基于OpenCV的车辆检测与追踪的实现
最近老师布置了一个作业,是做一个基于视频的车辆检测与追踪,用了大概两周的时间做了一个简单的,效果不是很理想,但抑制不住想把自己的一些认识写下来,这里就把一些网络上的博客整理一下分享给大家,希望帮助到大 ...
- OpenCV人脸识别Eigen算法源码分析
1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...
随机推荐
- linux 基于 jiffy 的超时
到目前为止所展示的次优化的延时循环通过查看 jiffy 计数器而不告诉任何人来工作. 但是最好的实现一个延时的方法, 如你可能猜想的, 常常是请求内核为你做. 有 2 种方 法来建立一个基于 jiff ...
- import()函数
简介 import命令会被 JavaScript 引擎静态分析,先于模块内的其他模块执行(叫做”连接“更合适).所以,下面的代码会报错. // 报错 if (x === 2) { import MyM ...
- Team Foundation Server 2015使用教程【4】:默认团队权限说明
- python 练习题3
# 计算阶乘def factorial(n): if n>2: return n*factorial(n-1) else: return nprint(factorial(2))print(fa ...
- 理解C/C++的复杂声明
理解C/C++的复杂声明 曾经碰到过让你迷惑不解.类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复C/C ...
- JS事件之自建函数bind()与兼容性问题解决
JavaScript事件绑定常用方法 对象.事件 = 函数; 它只能同时为一个对象的一个事件绑定一个响应函数 不能绑定多个,如果有多个,后面的会覆盖前面的 addEventListener() 此方法 ...
- jquery中如何判断checkbox是否选中
jquery代码: <script> $(document).ready(function() { $('#checkbox-id').click(function() { if($('# ...
- 在 Win7、Win10 家庭版中启用组策略(gpedit.msc)
Windows 家庭版并没有组策略,对于计算机维护.优化和设置非常不方便.使用以下批处理可以在不安装专业版.旗舰版的情况下启用组策略. 一.新建一个批处理脚本 1 @echo off 2 3 push ...
- 认识Web应用框架
Web应用框架 Web应用框架(Web application framework)是一种开发框架,用来支持动态网站.网络应用程序及网络服务的开发.类型可以分为基于请求(request-based)的 ...
- 解决 Table ‘performance_schema.session_variables’ doesn’t exist 问题
performance_schema在mysql5.5以上就有自带 performance_schema(安装数据库时自带的)如果装数据库或者使用数据时不小心删除了,就会出现Table‘perform ...