照明与图像

光通量:

  • 人眼所能感受到的辐射功率,等于单位时间内某一波段的辐射能量和该波段的相对视见率的乘积。
  • 单位是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 cv

filename = '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;
	}
	else
		std::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)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值