圖像
灰度圖
灰度是描述灰度圖像內容的最直接的視覺特征。它指黑白圖像中點的顏色深度,范圍一般從0到255,白色為255,黑色為0,故黑白圖像也稱灰度圖像。灰度圖像矩陣元素的取值通常為[0,255],因此其數據類型一般為8位無符號整數,這就是人們通常所說的256級灰度。 灰度圖:一個像素的灰度可以用8 位整數記錄,也就是一個0~255的值。
深度圖
當我們要記錄的信息更多時,一個字節就不夠了。 在RGB-D相機的深度圖中,記錄了各個像素與相機之間的距離。這個距離通常是以毫米為單位,而RGB-D 相機的量程通常在十幾米左右,超過了255。 人們會采用16 位整數(C++ 中的unsigned short)來記錄深度圖的信息,也就是位于0~65535 的值。換算成米的話,最大可以表示65 米,足夠RGB-D 相機使用了。
彩色圖
彩色圖像的表示則需要通道(channel)的概念。在計算機中,我們用紅色、綠色和藍色這三種顏色的組合來表達任意一種色彩。于是對于每一個像素,就要記錄其R、G、B 三個數值,每一個數值就稱為一個通道。例如,最常見的彩色圖像有三個通道,每個通道都由8 位整數表示。在這種規定下,一個像素占據24 位空間。 通道的數量、順序都是可以自由定義的。在OpenCV 的彩色圖像中,通道的默認順序是B、G、R。也就是說,當我們得到一個24 位的像素時,前8 位表示藍色數值,中間8 位為綠色,最后8 位 為紅色。同理,亦可使用R、G、B 的順序表示一個彩色圖。如果還想表達圖像的透明度,就使用R、G、B、A 四個通道。
RGB彩色圖與灰度圖之間的轉換
彩色圖像轉換為灰度圖像時,需要計算圖像中每個像素有效的亮度值,其計算公式為: Y = 0.299R + 0.578G + 0.114B
雙目相機通過視差來計算深度。RGBD相機則可以主動測量每個像素的深度。
-
通過紅外結構光(Structured Light)來測量像素距離的。例子有Kinect 1 代、Project Tango 1 代、Intel RealSense 等。
-
通過飛行時間法(Time-of-flight,ToF)原理測量像素距離的。例子有Kinect 2 代和一些現有的ToF 傳感器等
RGBD相機原理圖
深度圖的保存
那么如何從RGBD相機提取像素的深度信息呢? 下面是一個簡單的小程序,可以顯示像素的深度信息.
#include
#include
#include
using namespace std;
float depthscale = 1.0f/1000; //尺度因子,表示一個像素對應多少實際中的米
int main(int argc, char **argv)
{
cv::Mat depth = cv::imread("img.jpg");
depth.convertTo(depth,CV_32FC1,depthscale); //這個轉換很重要
for (int v = 0; v < depth.rows; v++)
{
for (int u = 0; u < depth.cols; u++) {
unsigned int d = depth.ptr<unsigned short>(v)[u]; // 深度值
if (d == 0)
continue; // 為0表示沒有測量到
else
{
cout<"";
if(v%50==0||u%50==0)
cout<<endl;
}
}
}
return 0;
}
ConvertTo()函數
需要注意,其中的ConvertTo函數作用如下:
img: 圖像數據來源,其類型為Mat。
注意: 不是所有格式的Mat型數據都能被使用保存為圖片,目前OpenCV主要只支持單通道和3通道的圖像,并且此時要求其深度為8bit和16bit無符號(即CV_16U),所以其他一些數據類型是不支持的,比如說float型等。如果Mat類型數據的深度和通道數不滿足上面的要求,則需要使用convertTo()函數和cvtColor()函數來進行轉換。
convertTo()函數負責轉換數據類型不同的Mat,即可以將類似float型的Mat轉換到imwrite()函數能夠接受的類型。
而cvtColor()函數是負責轉換不同通道的Mat,因為該函數的第4個參數就可以設置目的Mat數據的通道數(只是我們一般沒有用到它,一般情況下這個函數是用來進行色彩空間轉換的)。
另外也可以不用imwrite()函數來存圖片數據,可以直接用通用的XML IO接口函數將數據存在XML或者YXML中。
具體含義,縮放并轉換到另外一種數據類型:
-
dst:目的矩陣;
-
type:需要的輸出矩陣類型,或者更明確的,是輸出矩陣的深度,如果是負值(常用-1)則輸出矩陣和輸入矩陣類型相同;
-
scale:比例因子;
-
shift:將輸入數組元素按比例縮放后添加的值;
dst(i)=src(i)xscale+(shift,shift,...)
-
圖像數據
+關注
關注
0文章
52瀏覽量
11276 -
函數
+關注
關注
3文章
4329瀏覽量
62575 -
模型
+關注
關注
1文章
3229瀏覽量
48812
原文標題:RGBD相機模型與圖片處理
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論