照明与图像
光通量:
- 人眼所能感受到的輻射功率,等于單位時間內某一波段的輻射能量和該波段的相對視見率的乘積。
- 單位是lm(流明)
- 1流明 = 0.00146瓦
輻照度
- 投射到一平表面上的輻射通量密度。指到達一表面上,單位時間,單位面積上的輻射能。
- 以符號E表示,常用單位lux(勒克斯)
- 1 lux = 1 lm/m2
圖像傳感器基本原理:
感光面中每一個小格對應圖片的一個像素。
對于彩色圖像傳感器,相比灰度傳感器在感光面上多了一層顏色薄膜層,由RGB三種小孔組成,最上面是微透鏡層,它保證光能集中在帶顏色的孔上。
彩色圖片有3個通道。
顏色空間
顏色模型:
- RGB顏色模型(三原色)
- CMYK顏色模型(RGB的補色,三補色,K代表黑色,常用于印刷服裝業,因為我們看到的是顏料吸收某種顏色之后的補色)
- HSI顏色模型(色調H是描述純色的屬性,如紅色,黃色;飽和度S表示的是一種純色被白光稀釋的程度的度量;亮度I體現了無色的光強度概念,是一個主觀的描述)
顏色空間的分解
相關函數:
- 顏色空間轉換:
Python:
- 通道分離
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)。跟任意其它類型容器一樣,它能夠存放各種類型的對象。可以簡單的認為,向量是一個能夠存放任意類型的動態數組。
總結
- 上一篇: python解析xml+得到pascal
- 下一篇: 线性运算和非线性运算