光通量:
- 人眼所能感受到的辐射功率,等于单位时间内某一波段的辐射能量和该波段的相对视见率的乘积。
- 单位是lm(流明)
- 1流明 = 0.00146瓦
辐照度
- 投射到一平表面上的辐射通量密度。指到达一表面上,单位时间,单位面积上的辐射能。
- 以符号E表示,常用单位lux(勒克斯)
- 1 lux = 1 lm/m2
图像传感器基本原理:
感光面中每一个小格对应图片的一个像素。
对于彩色图像传感器,相比灰度传感器在感光面上多了一层颜色薄膜层,由RGB三种小孔组成,最上面是微透镜层,它保证光能集中在带颜色的孔上。
彩色图片有3个通道。
颜色空间
颜色模型:
- RGB颜色模型(三原色)
- CMYK颜色模型(RGB的补色,三补色,K代表黑色,常用于印刷服装业,因为我们看到的是颜料吸收某种颜色之后的补色)
- HSI颜色模型(色调H是描述纯色的属性,如红色,黄色;饱和度S表示的是一种纯色被白光稀释的程度的度量;亮度I体现了无色的光强度概念,是一个主观的描述)
颜色空间的分解
相关函数:
- 颜色空间转换:
Python:
dst = cv2.cvtColor(src, code[, dst[, dstCn]])
# src表示要转换的原始图像
# code表示要转换的具体颜色空间类型
# []里的参数可以省略
- 通道分离
Python:
形如 bgr[:, :, 0]表示第0个通道(blue)
颜色空间:
- Opencv中,彩色图像缺省为BGR格式,颜色三通道顺序为B,G,R,分别对应索引0,1,2(这点和windows不同,后者缺省是RGB)
- Opencv中,HSI/HSV颜色空间中H的取值范围是0-180,其他两个是0-255.
- 两个相似的概念:HSI和HSV空间。HSV里面的v指的是RGB里面的最大的值,v = max(r,g,b);而HSI的I是平均值,I = (r+g+b)/3;另外两个分量应该是一样的。
OpenCV实现程序实例:
import cv2 as cvfilename = 'C:/python/img/lena.jpg'
img = cv.imread(filename)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)cv.imshow("source image", img)
cv.imshow("gray", gray)
cv.waitKey() #等候鼠标操作,关闭窗口hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)cv.imshow("Hue", hsv[:, :, 0])
cv.imshow("Saturation", hsv[:, :, 1])
cv.imshow("Value", hsv[:, :, 2])
cv.waitKey()cv.imshow("Blue", img[:, :, 0])
cv.imshow("Green", img[:, :, 1])
cv.imshow("Red", img[:, :, 2])cv.waitKey()
cv.destroyAllWindows()
彩色图像的各通道都是二维矩阵,分别显示为灰度图像。
c++版:
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>//using namespace std;
using namespace cv;int main()
{Mat srcImage = imread("lena.jpg");//判断图像是否加载成功if (!srcImage.data){std::cout << "图像加载失败!" << std::endl;return false;}elsestd::cout << "图像加载成功!" << std::endl << std::endl;//显示原图像namedWindow("原图像", WINDOW_AUTOSIZE);imshow("原图像", srcImage);//将图像转换为灰度图,采用CV_前缀Mat grayImage;cvtColor(srcImage, grayImage, COLOR_BGR2GRAY); //将图像转换为灰度图namedWindow("灰度图", WINDOW_AUTOSIZE);imshow("灰度图", grayImage);//将图像转换为HSV,采用COLOR_前缀Mat HSVImage;cvtColor(srcImage, HSVImage, COLOR_BGR2HSV); //将图像转换为HSV图namedWindow("HSV", WINDOW_AUTOSIZE);imshow("HSV", HSVImage);//分离HSV三通道std::vector<Mat> hsvChannels;split(HSVImage, hsvChannels);imshow("image_H", hsvChannels[0]);imshow("image_S", hsvChannels[1]);imshow("image_V", hsvChannels[2]);waitKey(0);return 0;
}
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。