2015-06-08 45 views
0

我OpenCV中加載的深度圖像與轉換無符號短墊在OpenCV的矢量

cv::Mat depth = cv::imread("blabla.png",CV_LOAD_IMAGE_UNCHANGED); 

然後得到它的一個子圖像與

cv::Mat sub_image= depth(cv::Rect(roi_x,roi_y,roi_size,roi_size)).clone(); 

現在我想的是sub_image轉換成向量

我嘗試用

std::vector<uchar> array; 
array.assign(sub_image.datastart,sub_image.dataend); 

在StackOverflow中發現了類似問題,但它似乎無法正常工作。

數組賦值心不是roi_size後的尺寸* roi_size, 而是roi_size * roi_size * 2

一些錯誤向量的類型?我也嘗試過其他類型,如double,float,int等。

深度圖像的類型是unsigned short right?

編輯:

陣列填充正確(正確的尺寸roi_size * roi_size)當我規格化深度圖像

cv::Mat depthView; 
cv::normalize(depth, depthView, 0, 255, cv::NORM_MINMAX,CV_8UC1); 

但那不是我想要做的

+0

std ::向量? – GPPK

+0

已經試過了,沒有工作 – luthien

回答

0

感謝所有的幫助傢伙, 我想我設法解決了這個問題。

我改變了代碼爲數組賦值給這個

std::vector<unsigned short> array(sub_image.begin<unsigned short>(),sub_image.end<unsigned short>()); 

現在的大小是正確的roi_size * roi_size再次

感謝您的幫助。

0

你的roi_size*roi_size*2觀察是由於深度圖像是尺寸爲2 bytesshort類型的事實。您正嘗試將此圖像數據推送到類型爲unsigned char的數組。

使矢量類型爲short,您會發現數組大小回到了預期的roi_size*roi_size。價值也將是你期望的。

+0

恐怕'std :: vector 數組';'也沒有幫助... – luthien

0

您是否嘗試過檢查您讀取哪種類型的圖像,即使用帶有1通道的8位uchar的depth.type() == CV_8UC1

也許你的形象被解讀爲不同。 你試過用CV_LOAD_IMAGE_GRAYSCALE而不是CV_LOAD_IMAGE_UNCHANGED來讀取圖像嗎?

+0

std :: cout << depth.type()返回2根據這個 http://ninghang.blogspot.gr/2012/11/list-of-mat-type-in​​- OpenCV的。html 我的深度圖像是CV_16U,有1個通道, 加載它CV_LOAD_IMAGE_GRAYSCALE使其類型爲0並且與它的值網格 – luthien

+0

官方的枚舉可以在這裏找到(http://docs.opencv.org/modules/core /doc/intro.html#fixed-pixel-types-limited-use-of-templates) – MisterC

+0

所以要根據,這將是USHORT? – GPPK